博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3087 Shuffle'm Up(模拟题)
阅读量:5076 次
发布时间:2019-06-12

本文共 1328 字,大约阅读时间需要 4 分钟。

 

 

大意:

已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。现在输入s1和s2的初始状态 以及 预想的最终状态s12。问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"

 

思路:就是个字符串模拟题。

 

 
 
1 #include 
2 #include
3 4 void Solve() 5 { 6 int n, m; 7 char s1[110], s2[110], s3[210], s4[210], s[210]; 8 scanf("%d", &n); 9 for(int p = 1; p <= n; p++)10 {11 memset(s, 'a', sizeof(s));12 scanf("%d%*c", &m);13 scanf("%s%s%s", s1, s2, s3);14 printf("%d ", p);15 strcpy(s, s1);16 strcat(s, s2);17 strcpy(s4, s);18 int t;19 for(t = 0; strcmp(s, s3); t++)20 {21 for(int j = 0; j < m; j++)22 {23 s1[j] = s[j];24 s2[j] = s[j+m];25 }26 int i, j;27 for(i = 0, j = 0; i < m; i++, j+=2)28 {29 s[j] = s2[i];30 s[j+1] = s1[i];31 }32 if(strcmp(s4, s) == 0)33 {34 t = -1;35 break;36 }37 }38 printf("%d\n", t);39 }40 }41 42 int main(void)43 {44 //freopen("data.in", "r", stdin);45 Solve();46 47 return 0;48 }
Shuffle'm Up

 

转载于:https://www.cnblogs.com/Silence-AC/p/3491338.html

你可能感兴趣的文章
前端 获取项目根路径的四种方式
查看>>
统计操作耗时的类
查看>>
object类
查看>>
4我的第一个博客
查看>>
iOS中文API之UITouch详解
查看>>
Xamarin.Forms XAML控件的公共属性
查看>>
jdbc防止sql注入-PreparedStatement
查看>>
线段树超级大模版
查看>>
fn标签常用方法使用说明
查看>>
svn 如果遇到an unversioned directory of the same name already exists的解决办法
查看>>
寒假随笔(开启程序设计大佬模式)
查看>>
调试OV2735总结
查看>>
java中equals以及==的用法(简单介绍)
查看>>
远程桌面连接(连接服务器)报错Oracle修正
查看>>
git 的使用
查看>>
2018.07.23 洛谷P4097 [HEOI2013]Segment(李超线段树)
查看>>
cellforrowatindexpath 不执行 的原因
查看>>
UC_online在线抽奖_新浪UC(Tab页功能)
查看>>
解决 EDAS:Upload failed: The right margin is 0.535 in on page 1 问题
查看>>
javascript日期相减天数
查看>>