题目:http://poj.org/problem?id=3087
题意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。
现在输入s1和s2的初始状态 以及 预想的最终状态s12
问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"。
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<stack> 6 #include<queue> 7 #include<iomanip> 8 #include<cmath> 9 #include<map> 10 #include<vector> 11 #include<algorithm> 12 using namespace std; 13 14 int main() 15 { 16 int n,i,team,x=1,cnt,sum; 17 char a[250],b[250],c[450],t[450]; 18 cin>>team; 19 while(team--) 20 { 21 cin>>n; 22 map<string,int>mp; 23 map<string,int>::iterator iter; 24 cin>>a>>b>>c; 25 mp[c]=2; 26 sum=0; 27 printf("%d ",x++); 28 while(1) 29 { 30 sum++; 31 cnt=0; 32 for(i=0; i<n; i++) 33 { 34 t[cnt++]=b[i]; 35 t[cnt++]=a[i]; 36 } 37 t[cnt]='