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

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

题目链接:

题目大意

模拟纸牌的洗牌过程,已知两个牌数相等的牌堆。求解经过多少次洗牌的过程,使牌的顺序与目标顺序相同。

思路

直接模拟,主要是字符串的操作。问题是,如何判断出不可能的情况。这个题好像除了找是否会出现无限循环以外找不到更好的判断方法了。

如果是用字符数组来写的话,要注意末尾'\0'要有,并且strcmp返回0是说明字符数组相等。

题解

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 string s1, s2; 7 string t, tmp, _tmp; 8 9 10 long long n, ans, length;11 12 int shuffle()13 {14 map
vis;15 long long flag = 0;16 while(1)17 {18 //cout << tmp << endl;19 tmp = "";20 flag++;21 for(int i = 0; i < length; i++)22 {23 tmp += s2[i];24 tmp += s1[i];25 }26 if(tmp == t)27 {28 return flag;29 }30 if(vis[tmp] == 1)31 {32 return -1;33 }34 35 vis[tmp] = 1;36 s1 = tmp.substr(0, length);37 s2 = tmp.substr(length, length*2);38 }39 }40 41 int main(int argc, char const *argv[])42 {43 #ifdef debug44 freopen("test.txt","r",stdin);45 #endif46 cin >> n;47 for(int ii = 1; ii <= n; ii++)48 {49 cin >> length;50 cin >> s1 >> s2 >> t;51 52 ans = shuffle();53 54 cout << ii << " " << ans << endl;55 }56 return 0;57 }

 

转载于:https://www.cnblogs.com/SaltyFishQF/p/10310323.html

你可能感兴趣的文章
BZOJ 1833: [ZJOI2010]count 数字计数( dp )
查看>>
关于toString()和String()要说几句话
查看>>
bzoj 3751[NOIP2014]解方程
查看>>
CSS(二) 文字样式属性,背景和列表
查看>>
js 经典闭包题目详解
查看>>
在项目中移除CocoaPods
查看>>
面试题三 替换空格
查看>>
LeetCode104.二叉树最大深度
查看>>
linux usb驱动——Gadget代码介绍
查看>>
【洛谷】CYJian的水题大赛【第二弹】解题报告
查看>>
POJ 1703 Find them, Catch them【种类/带权并查集+判断两元素是否在同一集合/不同集合/无法确定+类似食物链】...
查看>>
L1-5. A除以B【一种输出格式错了,务必看清楚输入输出】
查看>>
Git一分钟系列--快速安装git客户端
查看>>
使用 ref 和 out 传递数组注意事项
查看>>
纵越6省1市-重新启动
查看>>
hive安装以及hive on spark
查看>>
勇者无畏
查看>>
12864点阵液晶显示模块的原理和实例程序(HJ12864M-1)
查看>>
jz1074 【基础】寻找2的幂
查看>>
Wannafly模拟赛5 A 思维 D 暴力
查看>>