poj 3087 Shuffle'm Up ( map 模拟 )
2013-08-27 09:57
417 查看
题目:http://poj.org/problem?id=3087
题意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。
现在输入s1和s2的初始状态 以及 预想的最终状态s12
问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"。
题意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。
现在输入s1和s2的初始状态 以及 预想的最终状态s12
问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"。
#include <iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<stack> #include<queue> #include<iomanip> #include<cmath> #include<map> #include<vector> #include<algorithm> using namespace std; int main() { int n,i,team,x=1,cnt,sum; char a[250],b[250],c[450],t[450]; cin>>team; while(team--) { cin>>n; map<string,int>mp; map<string,int>::iterator iter; cin>>a>>b>>c; mp[c]=2; sum=0; printf("%d ",x++); while(1) { sum++; cnt=0; for(i=0; i<n; i++) { t[cnt++]=b[i]; t[cnt++]=a[i]; } t[cnt]='\0'; if(mp[t]==2) { cout<<sum<<endl; break; } if(mp[t]==1) { cout<<"-1"<<endl; break; } mp[t]=1; strncpy(a,t,n); a ='\0'; strcpy(b,t+n); b ='\0'; } } return 0; }
相关文章推荐
- Shuffle'm Up (poj 3087 模拟)
- POJ-3087 Shuffle'm Up (模拟)
- POJ 3087 Shuffle'm Up 模拟
- POJ 3087 Shuffle'm Up
- POJ 3087 Shuffle'm Up bfs
- POJ 3087Shuffle'm Up(模拟)
- POJ 3087 Shuffle'm Up 模拟
- [模拟]POJ 3087 Shuffle'm up
- poj 3087 Shuffle'm Up 模拟
- POJ 3087 Shuffle'm Up(水题)
- (水)POJ-3087 模拟,map,string
- POJ训练计划3087_Shuffle'm Up(模拟)
- poj 3087 Shuffle'm Up(模拟)
- POJ 3087 - Shuffle'm Up (模拟)
- poj 3087 Shuffle'm Up(bfs)
- POJ 3087 Shuffle'm Up
- POJ - 3087 Shuffle'm Up解题报告(模拟)
- Poj 3087 Shuffle'm Up
- POJ 3087 Shuffle'm Up
- POJ 3087:Shuffle'm Up