3087Shuffle'm Up
不知道为什么compile error,第一次用#include "map",可能就是因为这个原因吧,上次有个同学介绍我上一个网站,它可以帮我评定是那一部分出错
我的代码
#include "iostream" #include "algorithm" #include <map> #include <string.h> using namespace std; int main(){ int top=1,step,flag1,ncase,n,j,i; char list1[110],list2[110],list3[220],list4[220],endlist[220]; cin>>ncase; while(ncase--){ cin>>n; cin>>list1>>list2>>list3; step=0;flag1=0; map<string,bool>vis; while(1){ j=0; for(i=0;i<n;i++){ endlist[j++]=list2[i]; endlist[j++]=list1[i]; } endlist[j]='\0'; step++; if(vis[endlist])break; if(!strcmp(endlist,list3)){flag1=1;break;} vis[endlist]=true; for(i=0;i<n;i++){ list1[i]=endlist[i]; list2[i]=endlist[i+n]; } list1[i]='\0'; list2[i]='\0'; } if(flag1)cout<<top++<<' '<<step<<endl; else cout<<top++<<' '<<-1<<endl; } return 1; }
人家的代码
#include<iostream> #include<string> #include<map> using namespace std; int main(int i,int k) { int test,c; int t=0; cin>>test; while(++t<=test) { cin>>c; char s1[201]; //牌堆1 char s2[201]; //牌堆2 char s12[401]; //预设最终的牌堆状态 cin>>s1>>s2>>s12; map<string,bool>vist; //记录出现过的洗牌状态(map缺省值为0) vist[s12]=true; int step=0; //洗牌次数 while(true) { char s[201]; //当前s1与s2洗牌后的状态 int ps=0; //s[]指针 for(i=0;i<c;i++) //s1与s2洗牌 { s[ps++]=s2[i]; s[ps++]=s1[i]; } s[ps]='\0'; step++; if(!strcmp(s,s12)) //当洗牌后的状态能达到预设状态时,输出 { cout<<t<<' '<<step<<endl; break; } else if(vist[s] && strcmp(s,s12)) //当前洗牌后状态 与 前面出现过的状态重复了,但该状态不是预设状态 { //说明预设的状态无法达到 cout<<t<<' '<<-1<<endl; break; } vist[s]=true; //状态记录 for(i=0;i<c;i++) //分拆出s1与s2 s1[i]=s[i]; s1[i]='\0'; for(k=0;i<2*c;i++,k++) s2[k]=s[i]; s2[i]='\0'; } } return 0; }