poj 3087 广度搜索 + map用法
来源:互联网 发布:软件打包有哪些 编辑:程序博客网 时间:2024/04/29 23:11
题意:
给定长度都为C两个字符串,S1,S2,和一个要求的结果字符串S12。先把 S2 的最下面一张牌放在最下面,然后S1,S2交错的叠放,得到新的S12,再把S12最下面的C个字符赋值给S1,把剩下的赋值给S2,再次重复上面的过程。最后求出要得到目标字符串S,问最少需要几步。
注意:
题目所给出的输入是从低向上排列的。
#include <iostream>#include <map>#include <string>#include <queue>#include <algorithm>using namespace std;typedef long long ll;map<string, int> mp;int n;string tar;string trans(string s1, string s2) { string s12 = ""; for(int i = 0; i < n; i++) { s12 += s2[i], s12 += s1[i]; } return s12;}int bfs(string s1, string s2) { queue<string> que; string s12 = trans(s1, s2); mp[s12] = 1; que.push(s12); while(!que.empty()) { string front = que.front(); que.pop(); if(front == tar) return mp[front]; s1 = front.substr(0, n); s2 = front.substr(n, n); s12 = trans(s1, s2); if(mp[s12] > 0) return -1; mp[s12] = mp[front] + 1; que.push(s12); } return -1;}int main() { //freopen("in.txt", "r", stdin); int T, cas = 1; string s1, s2; cin >> T; while(T--) { mp.clear(); cin >> n; cin >> s1 >> s2 >> tar; int ans = bfs(s1, s2); cout << cas++ << ' ' << ans << endl; } return 0;}
map(string int )mp;
string s;
如果 mp[s]>0说明s这个字符串存在过一次。
另外
C++中substr函数的用法
include
include
using namespace std;
main()
{
string s(“12345asdf”);
string a=s.substr(0,5); //获得字符串s中 从第0位开始的长度为5的字符串//默认时的长度为从开始位置到尾
cout<
0 0
- poj 3087 广度搜索 + map用法
- 广度搜索-POJ 1753
- poj 广度优先搜索
- poj 3278 广度优先搜索
- POJ 3126广度搜索BFS
- POJ-3669广度优先搜索
- POJ 1915 Knight Moves (广度搜索)
- POJ 2251 Dungeon Master (广度搜索)
- poj 3414 Pots 广度优先搜索
- poj 3414 dfs 广度优先搜索
- poj 3322 Bloxorz I【广度优先搜索】
- POJ 3278 广度搜索 一个终点
- POJ 3984 迷宫问题(广度搜索)
- POJ-3984 迷宫问题 广度优先搜索
- poj 2503 map用法
- 广度搜索
- 广度搜索
- POJ 3278 Catch That Cow(BFS广度优先搜索)
- 9.sip模块
- 如何使用国内源部署Ceph?
- 移动GPU三种主流架构优缺点浅析
- 扩展欧几里得算法
- cmake安装mysql出错 ---CMake Error: Could not find CMAKE_ROOT !!! CMake has most likely not been installe
- poj 3087 广度搜索 + map用法
- RunLoop入门 看我就够了
- 青蛙跳台阶
- 机房收费系统——可行性研究报告
- POJ2192(Zipper)
- 跟小博老师一起学Servlet ——Servlet之监听器
- Qt for IOS:build from source
- segue跳转
- CF