POJ 3087 Shuffle'm Up

喜夏-厌秋 提交于 2020-02-07 09:42:59

POJ 3087 Shuffle’m Up(简单模拟题)

题目大意:
给出两个长度为len的字符串s1, s2和一个长度为2 * len的字符串s12,每次先让s2先s1后先后依次取一个字符得到一个长度为2 * len 的字符串s,如果发现得到的字符串s与s12相等就输出交换的次数,否则让s的左半边等于s1右半边等于s2再进行上面的变换,如果无法使的变换后的s == s12则输出-1。

具体思路:
直接模拟,注意判断为-1的条件是,经过若干次洗牌后,s1和s2变成了原来的s1,s2

具体代码:

#include<iostream>
#include<string>
#include<cstdio>
#include<stdlib.h>
using namespace std;

int main()
{
	int n;
	string ss1, ss2;
	cin >> n;
	for(int i=0;i<n;i++)
	{
		int c;
		string s1, s2, s12;
		cin >> c >> s1 >> s2 >> s12;
		ss1 = s1;
		ss2 = s2;
		int cnt = 0;
		int flag = 1;
		string newStr;
		do
		{
			cnt++;
			newStr = "";
			for (int i = 0; i < c; i++)
			{
				newStr += s2[i];
				newStr += s1[i];
			}
			s1 = newStr.substr(0, c);
			s2 = newStr.substr(c);
			if (s1 == ss1 && s2 == ss2) {
				flag = 0;
				break;
			}
		} while (s12 != newStr);
		if (flag)printf("%d %d\n", i+1, cnt);
		else printf("%d -1\n", i+1);
	}
	return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!