POJ 3087 模拟
给定两个长度为len的字符串s1和s2, 接着给出一个长度为len*2的字符串s12。
将字符串s1和s2通过一定的变换变成s12,找到变换次数
变换规则如下:
假设s1=12345,s2=67890
变换后的序列 s=6172839405
如果s和s12完全相等那么输出变换次数
如果不完全相等,s的前半部分作为s1,后半部分作为s2,重复上述过程。
Input
第一行给出T(1≤T≤1000),代表有T组数据,每组数据首先给出len(1≤len≤100),接着给出两个长度为len的字符串s1 s2 然后给出长度为len*2的字符串s12。
Output
首先输出处理数据组的编号(编号从1开始)
再输出变换次数并换行。
注意两个数字之间有空格。
对于变换次数,如果无需变换直接得到s12,那么输出0,如果无论怎么变换都不会得到s12,那么输出 -1。
Sample Input
2
4
AHAH
HAHA
HHAAAAHH
3
CDE
CDE
EEDDCC
Sample Output
1 2
2 -1 用到的知识:
1.首先是set,用于判断在若干次交换以后,是否存在重复的元素。
set<string>tmp;
tmp.find(s) 找到s在tmp这个容器里面的位置,返回值是一个迭代器。
tmp.end() 容器的末尾。
tmp.insert(s)把s这个串插入到tmp里面。
2.string
s.push_back( )在s的尾部插入一个字符。
s1.assign(s.begin(),s.begin+s.length())给s1赋值,形参是两个迭代器。 这里还可以用s1 = s.substr(0,mid); s2 = s.substr(mid,2*mid) substr函数是取字符的字串,形参是区间边界。
#include <iostream>
#include <string>
#include <set>
using namespace std; string s1,s2,s12;
int mid;
set<string> tmp; int main()
{
int n;
cin>>n;int l = n;
while(n--)
{
int count = 1;
cin>>mid;
cin>>s1>>s2>>s12;
while(1)
{
string s;
for(int i = 0; i < mid; i++)
s.push_back(s2[i]),s.push_back(s1[i]);
if(s == s12) { cout<<l-n<<" "<<count<<endl; break; } if(tmp.find(s) == tmp.end()) tmp.insert(s); //在tmp容器里面寻找s,未找到,返回的迭代器就是tmp.end(),就插入s。 else{cout<<l-n<<" "<<-1<<endl; break;} s1.assign(s.begin(),s.begin()+mid);
s2.assign(s.begin()+mid,s.begin()+2*mid);
count++;
}
tmp.clear();
} }
POJ 3087 模拟的更多相关文章
- POJ - 3087 模拟 [kuangbin带你飞]专题一
模拟洗牌的过程,合并两堆拍的方式:使先取s2,再取s1:分离成两堆的方式:下面C张放到s1,上面C张到s2.当前牌型与第一次相同时,说明不能搜索到答案. AC代码 #include<cstdio ...
- Shuffle'm Up POJ - 3087(模拟)
Shuffle'm Up Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15249 Accepted: 6962 Des ...
- POJ 3087 模拟+hash
也可以用map来搞 样例推出来 就没啥问题了 (先读的是B 然后是A 被坑好久) //By SiriusRen #include <cstdio> #include <iostrea ...
- 【模拟】POJ 3087
直达–>POJ 3087 Shuffle'm Up 题意:一开始没怎么看明白,注意现是从S2里拿牌放在最底下,再放S1,这样交叉放(我一开始以为是S1和S2随意哪个先放,分别模拟取最小),然后在 ...
- POJ.3087 Shuffle'm Up (模拟)
POJ.3087 Shuffle'm Up (模拟) 题意分析 给定两个长度为len的字符串s1和s2, 接着给出一个长度为len*2的字符串s12. 将字符串s1和s2通过一定的变换变成s12,找到 ...
- POJ 3087 Shuffle'm Up
Shuffle'm Up Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- POJ 3087 Shuffle'm Up(洗牌)
POJ 3087 Shuffle'm Up(洗牌) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 A common pas ...
- DFS POJ 3087 Shuffle'm Up
题目传送门 /* 题意:两块扑克牌按照顺序叠起来后,把下半部分给第一块,上半部给第二块,一直持续下去,直到叠成指定的样子 DFS:直接模拟搜索,用map记录该字符串是否被搜过.读懂题目是关键. */ ...
- POJ 3087 Shuffle'm Up (模拟+map)
题目链接:http://poj.org/problem?id=3087 题目大意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块 ...
随机推荐
- Faster-RCNN 算法解读(转)
论文:<Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks> 摘要:算法主要解决两个 ...
- JS -- serializeJSON
http://www.cnblogs.com/linzenews/p/7065050.html
- C# 客户端篇之实现Restful Client开发(RestSharp帮助类)
上篇文章<C# 服务端篇之实现RestFul Service开发(简单实用)>讲解到,如果开发一个简单的Restful风格的Service,也提到了简单创建一个Restful Client ...
- css的position中absolute和fixed的区别
fixed:固定定位 absolute:绝对定位 区别很简单: 1.没有滚动条的情况下没有差异 2.在有滚动条的情况下,fixed定位不会随滚动条移动而移动,而absolute则会随滚动条移动 常用场 ...
- 教你如何用笔记本设置超快WIFI
以win7为例 1.在主菜单运行框输入 cmd------->以管理员的身份运行 2.命令提示符中输入:netsh wlan set hostednetwork mode=allow ssid ...
- nginx 禁止恶意域名解析
server { listen default_server; server_name _; ssl on; ssl_certificate /etc/nginx/cert/aaaa.pem; ssl ...
- TX2-入门坑点-Ubuntu16.04任务栏消失
问题:安装cuda过程中出现任务栏消失,快捷键失效的现象. 解决方法:重装桌面无法解决,使用cssm无法解决,最后删除home目录下的 .cache文件夹重启后解决
- 通过ALT+F9关键CALL追踪注册码
1)弹出关键字对话框,记录关键字注册失败,请检查···· 2)使用PEID查壳 3)peid提示无壳 4)发送到OD 5)F9使od运行 5.1)继续输入用户 5.2)使其暂停 5.3)点击调试中的执 ...
- JSON.parse()和JSON.stringify()的解析与用途
JSON.parse()和JSON.stringify()的解析与用途 1.parse用于从一个字符串中解析出json对象 如: var str = '{"name":" ...
- 【ArcGIS for Server】制作并发布GP服务--缓冲分析为例
https://www.cnblogs.com/d2ee/p/3641279.html https://www.jianshu.com/p/5331fa708fe5 https://www.cnblo ...