PKU 3087 Shuffle'm Up

http://acm.pku.edu.cn/JudgeOnline/problem?id=3087

  • データサイズた小さいため単純にシミュレーションをするだけで間に合う
int main()
{
	int N;
	cin >> N;
	for (int testCase = 1; testCase <= N; ++testCase) {
		int C;
		cin >> C;
		int permutation[256];
		for (int i = 0; i < C * 2; ++i) {
			if (i % 2 == 0) {
				permutation[i] = i / 2 + C;
			} else {
				permutation[i] = i / 2;
			}
		}

		string s1, s2, target;
		cin >> s1 >> s2 >> target;
		string coins = s2 + s1;

		int answer = -1;
		for (int i = 1; i <= C * C * 4; ++i) {
			for (int j = 0; j < C * 2; ++j) {
				if (j % 2 == 0) {
					coins[j] = s2[j / 2];
				} else {
					coins[j] = s1[j / 2];
				}
			}

			if (coins == target) {
				answer = i;
				break;
			}

			s1.assign(coins.begin(), coins.begin() + C);
			s2.assign(coins.begin() + C, coins.end());
		}

		cout << testCase << " " << answer << endl;
	}
}