题目大意就洗两副牌,重复不停地洗,直到出现给定的顺序为止 输出洗牌步数即可,简单模拟一下洗牌和分牌的动作 这道题就不难了
呵呵 AC这道题只用了20分钟;
不过我有点弄不明白的是网上都说这个题是BFS?我怎么感觉一点也不像啊???
#include <iostream>
#include<algorithm>
#include<cmath>
#include <cstring>
using namespace std;
char origin1[200];
char origin2[200];
char mix[1000];
char des[1000];
int c;
void shuffle(char a[],char b[])
{
int i=0;
int j=0;
int pos=0;
int flag=1;
while(pos<=2*c-1)
{
if(flag==1)
{
mix[pos]=b[i];
j++;
pos++;
flag=2;
}
else if(flag==2)
{
mix[pos]=a[i];
i++;
pos++;
flag=1;
}
mix[pos]='\0';
}
}
void separate()
{
int i;
for(i=0;i<c;i++)
origin1[i]=mix[i];
for(i=c;i<2*c;i++)
origin2[i-c]=mix[i];
origin1[c]='\0';
origin2[c]='\0';
}
int main ()
{
int step;
int testcase;
int i;
char test1[200];
char test2[200];
int flag;
scanf("%d",&testcase);
for(i=1;i<=testcase;i++)
{
flag=0;
step=0;
scanf("%d",&c);
scanf("%s",origin1);
scanf("%s",origin2);
scanf("%s",des);
strcpy(test1,origin1);
strcpy(test2,origin2);
while(1)
{
shuffle(origin1,origin2);
step++;
if(strcmp(mix,des)==0)
break;
separate();
if(strcmp(test1,origin1)==0&&strcmp(test2,origin2)==0)
{
flag=1;
break;
}
}
if(flag==0)
printf("%d %d\n",i,step);
else
printf("%d -1\n",i);
}
system("pause");
return 0;
}