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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

