http://poj.org/problem?id=3087
題意 : 我只能說,,英語不好是硬傷。。。這個題比較別扭啊,不知道真正題意是不是我所想的,我先把我A了的代碼按照的題意的意思說一下,就是說兩堆字符串每堆n個字符,從下邊開始輪流取,其實輸入之后就是從頭開始取,先取第二個字符串的,放在最底下,再取第一個的,直到合成一個新的,然后再把下邊n個取出來當(dāng)成第一個字符串,上邊n個當(dāng)成第二個字符串,繼續(xù)進行上述操作,直到新合成的字符串與題目中給出的目標(biāo)字符串相同,若是合不成就輸出-1,每次輸出先輸出是第幾組數(shù)據(jù),再輸出需要幾次可以達到目標(biāo)字符串
思路 : 模擬?還行吧,挺簡單的,用map函數(shù)標(biāo)記一下就行,若是新合成的與之前某個合成的一樣的,代表著這一組會陷入無限循環(huán)中,所以直接輸出-1就行了

#include<cstdio> #include <iostream> #include <map> #include <cstring> using namespace std ; const int maxn = 1010 ; int main() { int n ; cin >> n ; char ch[maxn],sh[maxn],sch[maxn],neww[maxn] ; for ( int i = 1 ; i <= n ; i++ ) { map < string , int > p ; int m ,cnt = 0 ,sum = 0 ; cin >> m ; cin >>ch>>sh>> sch ; cout <<i<< ' ' ; while ( 1 ) { cnt = 0 ; for ( int j = 0 ; j < m ; j++ ) { neww[cnt ++] = sh[j] ; neww[cnt ++] = ch[j] ; } neww[ 2 *m] = ' \0 ' ; sum ++ ; if (strcmp(neww,sch) == 0 ) { cout <<sum<< endl; break ; } if (p[neww]) { cout << " -1 " << endl; break ; } p[neww] ++ ; strncpy(ch,neww,m); ch[m] = ' \0 ' ; strcpy(sh,neww + m); } } }
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
