POJ3087 Shuffle'm Up 简单模拟
2015-12-10 21:54
260 查看
题解
简单模拟题,题意就是给已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。给定输入s1和s2的初始状态 以及 预想的最终状态s12。 问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出”-1”。
代码
#include <stdio.h> #include <map> #include <string.h> #include <string> using namespace std; int main() { int n,c,t=0,cut,i; scanf("%d",&n); while(n--) { scanf("%d",&c); t++; cut=0; char s1[110],s2[110],s12[220],s[220]; scanf("%s%s%s",s1,s2,s12); map <string,int > map1; int len,flat=0; while(1) { cut++; len=0; for(i=0;i<c;i++) { s[len]=s2[i]; len++; s[len]=s1[i]; len++; } s[len]='\0'; if(strcmp(s,s12)==0) { flat=1; break; } if(map1.find(s)!=map1.end()) { break; } map1[s]=0; for(i=0;i<c;i++) { s1[i]=s[i]; s2[i]=s[i+c]; } } if(flat) { printf("%d %d\n",t,cut); } else { printf("%d -1\n",t); } } return 0; }
相关文章推荐
- IOS吐槽狂人:谷歌第三方解析爆红的解决步骤
- 48.复杂对象写入归档与反归档
- Freemarker的数据模型使用
- 用户和文件权限管理
- 数字在排序数组中出现的次数
- MFC-SetWindowPos-位图按钮-扩展对话框-更改Logo
- shell变量数学运算
- 【人月神话】读书笔记第7章 为什么巴比伦塔会失败
- 两个链表的第一个公共结点
- Linux基本命令操作
- tableView 详细使用方法
- 3DMAX 合并镜像物体
- 读书笔记 -- 004_数据预处理_数据规范化
- DelphiXe5中的双向绑定(使用使用TBindScope和TBindExpression,并覆盖AfterConstruction函数)
- JavaScript面向对象(01)--函数
- hdoj 找新朋友 1286 (欧拉函数入门)
- 网页切图的技巧及经验总结
- 网页切图的技巧及经验总结
- 为linux主机安装应用程序
- 证明静态函数在main函数运行前就运行了