POJ3087 Shuffle'm Up 简单模拟
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ3087 Shuffle'm Up 简单模拟相关的知识,希望对你有一定的参考价值。
题意:就是给你两副扑克,然后一张盖一张洗牌,不断重复这个过程,看能不能达到目标的扑克顺序
分析:然后就模拟下,-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; }
以上是关于POJ3087 Shuffle'm Up 简单模拟的主要内容,如果未能解决你的问题,请参考以下文章