标签:
题意:就是给你两副扑克,然后一张盖一张洗牌,不断重复这个过程,看能不能达到目标的扑克顺序
分析:然后就模拟下,-1的情况就是有循环节
#include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<cmath> #include<map> #include<queue> #include<stdlib.h> #include<string> #include<set> using namespace std; typedef long long LL; const int maxn=1005; const int INF=0x3f3f3f3f; set<string>s; char a[maxn],b[maxn],now[maxn*2]; string res; int ans,c,T; void dfs(int pos) { int x=1,y=1; for(int i=1; i<=c*2; ++i) { if(i%2)now[i]=b[y++]; else now[i]=a[x++]; } now[c*2+1]=‘\0‘; string temp=now+1; if(temp==res) { ans=pos; return; } if(s.find(temp)==s.end()) s.insert(temp); else return; for(int i=1; i<=c; ++i) { a[i]=now[i]; b[i]=now[i+c]; } dfs(pos+1); } int main() { scanf("%d",&T); for(int i=1; i<=T; ++i) { s.clear(); scanf("%d%s%s",&c,a+1,b+1); cin>>res; ans=INF; dfs(1); printf("%d ",i); if(ans==INF)printf("-1\n"); else printf("%d\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/shuguangzw/p/5165905.html