本文共 1005 字,大约阅读时间需要 3 分钟。
题意:就是给你两副扑克,然后一张盖一张洗牌,不断重复这个过程,看能不能达到目标的扑克顺序
分析:然后就模拟下,-1的情况就是有循环节
#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const int maxn=1005;const int INF=0x3f3f3f3f;set 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;}
转载于:https://www.cnblogs.com/shuguangzw/p/5165905.html