POJ 3087 Shuffle'm Up

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
#include
#include
#include
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;
}

你可能感兴趣的:(OJ题解)