POJ 3087 Shuffle'm Up - 模拟
来源:互联网 发布:沈阳seo技术 编辑:程序博客网 时间:2024/05/17 02:56
今天某沙做搜索专题的时候,碰到了一道模拟题。于是果断丢给我了。
开始看了题目还以为要用到stack,结果发现并不需要用到栈,只要用string类直接模拟就可以了。
大致说一下思路,就是用两堆牌来洗牌,看什么时候能洗到题目所给的情况,为了判断能否洗到所给情况,需要用map来记录一下已经出现过的情况。
如果没有出现题目所给的情况,但是已经出现了之前出现过的情况,说明洗牌已经成了一个环,始终无法洗到所给情况,这时候直接输出-1即可,否则每一次都要把洗完的牌,最下边的给s1,最上边的给s2。
用字符串数组和string类都可以,用string类要注意不能用角标替换,因为对string类不是很熟练,所以今天用了string类来做。
代码:
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <cmath>#include <map>using namespace std;int main(){ int T,c,i,count,cas=1; cin>>T; while(T--) { count=1; cin>>c; string s1,s2,s; cin>>s1>>s2>>s; //输入两堆牌以及需要找到的情况 map<string,bool> m; //用来记录是否已经出现过 m[s]=true; cout<<cas++<<' '; while(true) { string sh; //创建一个string类专门存每一次洗牌后的结果 string ss1,ss2; //两个string类来记录洗牌后两堆牌的情况 for(i=0;i<c;i++) { sh+=s2[i]; sh+=s1[i]; } if(!sh.find(s)) //找到所给情况输出 { cout<<count<<endl; break; } else if(sh.find(s)&&m[sh]) //未找到所给情况并且已经出现重复情况 { cout<<-1<<endl; break; } m[sh]=true; //未出现的情况记录下来 count++; for(i=0;i<c;i++) ss1+=sh[i]; for(i=c;i<c*2;i++) ss2+=sh[i]; s1=ss1; s2=ss2; } } return 0;}
0 0
- 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 (模拟)
- POJ 3087 Shuffle'm Up(模拟)
- POJ 3087 Shuffle'm Up(模拟)
- POJ 3087 Shuffle'm Up (模拟)
- POJ 3087 Shuffle'm Up(模拟)
- 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 - 模拟
- POJ 3087 Shuffle'm Up(模拟)
- 模拟-POJ-3087-Shuffle'm up
- POJ 3087-Shuffle'm Up(map+模拟)
- poj-3087-Shuffle'm Up-模拟
- Leetcode 27 Remove Element
- ASP小程序 处理动作,如计算数字值,回复聊天内容,基础框架 可扩展简单
- 【问底】徐汉彬:Web系统大规模并发——电商秒杀与抢购
- 接入机房产生冷凝水
- _CrtIsValidHeapPointer 跨dll接口参数数据传递问题
- POJ 3087 Shuffle'm Up - 模拟
- 【线段树】spoj GSS2 Can you answer these queries II
- HDU 1106 - Split String
- Linux进程类型
- HDU5312.Sequence
- [leetcode-15]3Sum(java)
- Spring声明式事务配置管理方法
- 第五篇 学习OpenCV之视频处理
- docker固定IP容器构造