本文共 989 字,大约阅读时间需要 3 分钟。
poj3087:
题意:题意简化之后的就是:给你两个长度均为c的字符串s1,s2,然后给你一个2*c的串ss,现在每次从s2,中取一个,然后再从s1,取出一个(都是从左往右),组成新的串,如果新的的串和ss相同,则说明s1,s2可以通过若干次洗牌,组成ss。现在就是来求这个步数,若存在,则输出,否则输出-1.
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 char s1[102],s2[102],aim[202],temp[202]; 9 int c;10 int main(){11 int t;12 scanf("%d",&t);13 for(int cas=1;cas<=t;cas++){14 map Q;15 scanf("%d",&c);16 scanf("%s",s1);17 scanf("%s",s2);18 scanf("%s",aim);19 int counts=0;20 Q[aim]=1;bool flag=true;21 while(true){22 for(int i=0;i<=2*c-1;i+=2)23 temp[i]=s2[i/2];24 for(int i=1;i<=2*c-1;i+=2)25 temp[i]=s1[i/2];26 counts++;27 temp[2*c]='\0';28 if(strcmp(temp,aim)==0)break;29 if(Q[temp]){30 flag=false;31 break;32 }33 Q[temp]=1;34 for(int i=0;i
转载于:https://www.cnblogs.com/chujian123/p/3536827.html