题目链接:http://poj.org/problem?id=3087

题目大意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。

现在输入s1和s2的初始状态 以及 预想的最终状态s12。问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"。

解题思路:照着模拟就好了,只是判断是否永远不能达到状态s12需要用map,定义map<string,int>mp,记录出现过的s1和s2合并产生的字符串,如果某一次s1、s2合并后产生的字符串曾经出现过,那说明会一直循环下去,也就无法到达状态s12了。

代码:

 #include<cstdio>
#include<queue>
#include<map>
#include<cstring>
#include<string>
using namespace std; int main(){
int T;
scanf("%d",&T);
int cas=;
while(T--){
char s1[],s2[],s3[],res[];
int len;
scanf("%d",&len);
scanf("%s%s%s",s1+,s2+,res+);
map<string,int>mp;
int ans=;
while(){
ans++;
for(int i=;i<=*len;i++){
if(i%)
s3[i]=s2[(i+)/];
else
s3[i]=s1[i/];
}
s3[*len+]='\0';
for(int i=;i<=*len;i++){
if(i<=len)
s1[i]=s3[i];
else
s2[i-len]=s3[i];
}
if(strcmp(res+,s3+)==)
break;
if(mp.find(s3)==mp.end())
mp[s3]=;
else{
ans=-;
break;
}
}
printf("%d %d\n",++cas,ans);
}
return ;
}

POJ 3087 Shuffle'm Up (模拟+map)的更多相关文章

  1. poj 3087 Shuffle'm Up (模拟过程)

    Description A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuff ...

  2. POJ 3087 Shuffle'm Up 模拟,看着不像搜索啊

    题意:给定s1,s1两副扑克,顺序从下到上.依次将s2,s1的扑克一张一张混合.例如s1,ABC; s2,DEF. 则第一次混合后为DAEBFC. 然后令前半段为s1, 后半段为s2. 如果可以变换成 ...

  3. POJ.3087 Shuffle'm Up (模拟)

    POJ.3087 Shuffle'm Up (模拟) 题意分析 给定两个长度为len的字符串s1和s2, 接着给出一个长度为len*2的字符串s12. 将字符串s1和s2通过一定的变换变成s12,找到 ...

  4. DFS POJ 3087 Shuffle'm Up

    题目传送门 /* 题意:两块扑克牌按照顺序叠起来后,把下半部分给第一块,上半部给第二块,一直持续下去,直到叠成指定的样子 DFS:直接模拟搜索,用map记录该字符串是否被搜过.读懂题目是关键. */ ...

  5. POJ 3087 Shuffle'm Up(洗牌)

    POJ 3087 Shuffle'm Up(洗牌) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 A common pas ...

  6. POJ 3087 Shuffle'm Up

    Shuffle'm Up Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  7. poj 3087 Shuffle'm Up ( map 模拟 )

    题目:http://poj.org/problem?id=3087 题意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s ...

  8. POJ 3087 Shuffle'm Up【模拟/map/string】

    Shuffle'm Up Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14471 Accepted: 6633 Descrip ...

  9. POJ 3087 Shuffle&#39;m Up(模拟)

    Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7404   Accepted: 3421 Desc ...

随机推荐

  1. Round 403 div. 2

    B 可以二分相遇的坐标:也可以二分时间,判断是否存在两个人的区间没有交. An easy way to intersect a number of segments [l1, r1], ..., [l ...

  2. restful风格请求及都是 / 的请求及参数也在请求的/中

    前台请求的样式: http://localhost:8080/item/88909 其中参数就是最后的 商品id号  88909 后台Controller中取出参数的方法: @Controller p ...

  3. Codeforces 892 C.Pride

    C. Pride time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  4. 009.C++ const使用

    1.引例 class complex { public: complex(, ) : re (r), im (i) {} complex& operator += (const complex ...

  5. discuz安装小云app

    小云app登录注册: https://oauth.apps.xiaoyun.com/auth/login.do?authentication_error=1 from:http://lusongson ...

  6. jquery validate submitHandler 提交导致死循环

    dom对像的提交form.submit();和jquery对像的提交$('').submit();功能上是没有什么区别的.但是如果用了jquery validate插件,提交时这二个就区别大了.$(' ...

  7. Eclipse中 如何实现 多行同时编辑

    在编辑的时候按下 SHIFT + ALT +A 之后  鼠标变为 + 号   选择要同时编辑几行  即可编辑(现在eclipse好像只能是编辑一块地方  不能像vs那样 任何地方可以同时编辑  这点很 ...

  8. 1.redis设计与实现--简单动态字符串

    1.redis没有使用c语言的字符串表示,而是使用更加适合自己的SDS(simple dynamic string),简单动态字符串,结构如下: 2.sys与c字符串的对比: 3.总结: redis采 ...

  9. zoj 3229 Shoot the Bullet(有源汇上下界最大流)

    Shoot the Bullethttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3442 Time Limit: 2 Second ...

  10. HDU 1452 欧拉定理

    让你求$2004^x$所有因子之和,因子之和函数是积性函数$\sigma(n)=\sum_{d|n}d=\prod_{i=0}^{m}(\sum_{j=0}^{k_i}{P_i^{j}})$可用二项式 ...