POJ
来源:互联网 发布:精通matlab混合编程 编辑:程序博客网 时间:2024/05/29 07:55
题意: 有两堆牌s1和s2 输入顺序都是从下到上的。 每次进行这样的操作:取s2的第一张放在新堆里的顶端,取s1的第一张放在新堆里的顶端,重复操作直到s1和s2为空,这时判断新堆s是否和目的堆相等,如果相等就输出经历的次数,否则将生成堆的下面的c个给s1,其余的给s2,重复操作。注意的是用map查重,一旦出现重复说明为死循环,输出-1.
我也不知道这能不能算是搜索。
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <map>using namespace std;map<string,int> ma;string s1,s2;//vector<char> v;string s3;string s;string s4;int c,t;void simulate_it(){ int ans= 0; while(true) {// v.clear(); int e=0; s="";// cout << "len : " <<s1.size() << ' ' <<s2.size() <<endl; for(int i=0;i<s1.size()||i<s2.size();i++) { if(i>=s1.size()) { s+=s2[i];// cout << s[e-1] << " " ; } else if(i>=s2.size()) { s+=s1[i];// C cout << s[e-1] << " " ; } else { s+=s2[i]; s+=s1[i];// cout << s[e-2] << " " ;// cout << s[e-1] << " " ; } }// s4=s;// for(int i=0;i<v.size();i++)// {// s[i]=v[i];// }// for(int i=0;i<e;i++)// {// cout << s4[i] << ' ' ;// }// cout << endl; ans++;// cout <<"s:" << s<<endl; if(s==s3) { cout << ans << endl; break; } if(ma[s]!=0) { cout << "-1" << endl; break; } ma[s]++; s1=""; s2=""; for(int i=0;i<s.size();i++) { if(i<c) s1+=s[i]; else s2+=s[i]; } }// return 0;}int main(){ cin >> t; for(int i=1;i<=t;i++) { ma.clear(); scanf("%d",&c); cin >> s1 >> s2 >> s3; cout << i << " "; simulate_it(); } return 0;}
1 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- Testng执行顺序控制
- I.T. Professional
- appium之事件监听(二)
- Phoenix二级索引(Secondary Indexing)的使用
- g2o:一种图优化的C++框架
- POJ
- BZOJ4825: [Hnoi2017]单旋
- mysql开启GTID跳过错误的方法
- SQL SERVER【非域环境】同步复制(事务)之搭建篇(2)
- libvirt(virsh命令介绍)
- Struts2标签 if else 的使用
- Andorid 关于时间戳和uuid
- 深度学习中的batch size
- C++第3次实验(基础班)—选择结构程序设计(参考答案)-项目3:定期存款利息计算器