您的位置:首页 > 其它

POJ 3087 Shuffle'm Up

2015-08-15 22:16 309 查看
题目大意:

有两个长度为K的字符串S1,S2,两个字符串的字符交叉放置组成新的长为2*k的字符串s3,与题目给出的S相比较,若不相同,s3的前K个字符重新组成s1,剩余的组成s2,继续循环,若最终能和S相同,输出所需步数,不可行则输出impossible.

思路:

用模拟做就行了,虽然这题放在模拟专题里,但是只有一个入口,用BFS意义不大。

#include <iostream>
#include <map>
using namespace std;

int main()
{
int ss;
cin >> ss;
for (int i = 1; i <= ss; ++i)
{
int k;
map <string,int> p;
string s1,s2,s,s3;
cin >> k;
cin >> s1 >> s2 >> s3;
s = "";
int cnt = 0;
int ok = 1;
while (1)
{
for (int j = 0; j != k; ++j)
{
s += s2[j];
s += s1[j];
}
cnt++;
if (s != s3)
if (p[s] == 0)
p[s]++;
else
{
ok = 0;
break;
}
else
break;
s1 = s.substr(0,k);
s2 = s.substr(k,k);
s = "";

}
cout << i << ' ';
if (ok)
cout << cnt << endl;
else
cout << -1 << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: