Submission #3435617


Source Code Expand

#include<algorithm>
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
#include<utility>
#include<queue>
#include<cmath>
using namespace std;
#define REP(i, a,b) for(i=a;i<b;i++) 
#define REP1(i,b,a) for(i=b-1;i>=a;i--)
#define output(x) cout<<x<<endl;
#define pb(x) push_back(x);
typedef long long int ll;


const int MAX = 510000;
const int MOD = 1000000007;

long long fac[MAX], finv[MAX], inv[MAX];

// テーブルを作る前処理
void COMinit() {
	fac[0] = fac[1] = 1;
	finv[0] = finv[1] = 1;
	inv[1] = 1;
	for (int i = 2; i < MAX; i++) {
		fac[i] = fac[i - 1] * i % MOD;
		inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD;
		finv[i] = finv[i - 1] * inv[i] % MOD;
	}
}


int main() {
	ll i, j, k, l, m, n, sum, flag, cc,N,M,X;
	sum = 0;
	flag = 0;
	cin >> N;
	char s[100001];
	char ans[100001];
	cin >> s;
	char s1[2] = { 'S','W' };
	char s2[2] = { 'o','x' };
	//最初の二つがS,S.
	ans[0] = s1[0];
	ans[1] = s1[0];
	REP(i, 2, N) {
		if ((s[i - 1] == s2[0] && ans[i - 1] == s1[0])||(s[i-1]==s2[1]&&ans[i-1]==s1[1])) {
			ans[i] = ans[i - 2];
		}
		else {
			if (ans[i - 2] == s1[0]) {
				ans[i] = s1[1];
			}
			else {
				ans[i] = s1[0];
			}
		}

	}
	if ((s[N - 1] == s2[0]&&ans[N-1]==s1[0])||(s[N-1]==s2[1]&&ans[N-1]==s1[1])) {
		if (ans[N - 2] == ans[0]) {
			if ((s[0] == s2[0] && ans[0] == s1[0]) || (s[0] == s2[1] && ans[0] == s1[1])) {
				if (ans[N - 1] == ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			else {
				if (ans[N - 1] != ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			return 0;
	}
	}
	else {
		if (ans[N - 2] != ans[0]) {
			if ((s[0] == s2[0] && ans[0] == s1[0]) || (s[0] == s2[1] && ans[0] == s1[1])) {
				if (ans[N - 1] == ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			else {
				if (ans[N - 1] != ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			return 0;
		}
	}
	//最初の二つがW,S.
	ans[0] = s1[1];
	ans[1] = s1[0];
	REP(i, 2, N) {
		if ((s[i - 1] == s2[0] && ans[i - 1] == s1[0]) || (s[i - 1] == s2[1] && ans[i - 1] == s1[1])) {
			ans[i] = ans[i - 2];
		}
		else {
			if (ans[i - 2] == s1[0]) {
				ans[i] = s1[1];
			}
			else {
				ans[i] = s1[0];
			}
		}

	}
	if ((s[N - 1] == s2[0] && ans[N - 1] == s1[0]) || (s[N - 1] == s2[1] && ans[N - 1] == s1[1])) {
		if (ans[N - 2] == ans[0]) {
			if ((s[0] == s2[0] && ans[0] == s1[0]) || (s[0] == s2[1] && ans[0] == s1[1])) {
				if (ans[N - 1] == ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			else {
				if (ans[N - 1] != ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			return 0;
		}
	}
	else {
		if (ans[N - 2] != ans[0]) {
			if ((s[0] == s2[0] && ans[0] == s1[0]) || (s[0] == s2[1] && ans[0] == s1[1])) {
				if (ans[N - 1] == ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			else {
				if (ans[N - 1] != ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			return 0;
		}
	}
	//最初の二つがS,W.
	ans[0] = s1[0];
	ans[1] = s1[1];
	REP(i, 2, N) {
		if ((s[i - 1] == s2[0] && ans[i - 1] == s1[0]) || (s[i - 1] == s2[1] && ans[i - 1] == s1[1])) {
			ans[i] = ans[i - 2];
		}
		else {
			if (ans[i - 2] == s1[0]) {
				ans[i] = s1[1];
			}
			else {
				ans[i] = s1[0];
			}
		}

	}
	if ((s[N - 1] == s2[0] && ans[N - 1] == s1[0]) || (s[N - 1] == s2[1] && ans[N - 1] == s1[1])) {
		if (ans[N - 2] == ans[0]) {
			if ((s[0] == s2[0] && ans[0] == s1[0]) || (s[0] == s2[1] && ans[0] == s1[1])) {
				if (ans[N - 1] == ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			else {
				if (ans[N - 1] != ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			return 0;
		}
	}
	else {
		if (ans[N - 2] != ans[0]) {
			if ((s[0] == s2[0] && ans[0] == s1[0]) || (s[0] == s2[1] && ans[0] == s1[1])) {
				if (ans[N - 1] == ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			else {
				if (ans[N - 1] != ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			return 0;
		}
	}
	//最初の二つがW,W.
	ans[0] = s1[1];
	ans[1] = s1[1];
	REP(i, 2, N) {
		if ((s[i - 1] == s2[0] && ans[i - 1] == s1[0]) || (s[i - 1] == s2[1] && ans[i - 1] == s1[1])) {
			ans[i] = ans[i - 2];
		}
		else {
			if (ans[i - 2] == s1[0]) {
				ans[i] = s1[1];
			}
			else {
				ans[i] = s1[0];
			}
		}

	}
	if ((s[N - 1] == s2[0] && ans[N - 1] == s1[0]) || (s[N - 1] == s2[1] && ans[N - 1] == s1[1])) {
		if (ans[N - 2] == ans[0]) {
			if ((s[0] == s2[0] && ans[0] == s1[0]) || (s[0] == s2[1] && ans[0] == s1[1])) {
				if (ans[N - 1] == ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			else {
				if (ans[N - 1] != ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			return 0;
		}
	}
	else {
		if (ans[N - 2] != ans[0]) {
			if ((s[0] == s2[0] && ans[0] == s1[0]) || (s[0] == s2[1] && ans[0] == s1[1])) {
				if (ans[N - 1] == ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			else {
				if (ans[N - 1] != ans[1]) {
					REP(i, 0, N) {
						cout << ans[i];
					}
				}
			}
			return 0;
		}
	}

	output("-1");


	return 0;
}

Submission Info

Submission Time
Task D - Menagerie
User nakana_kayaru
Language C++14 (GCC 5.4.1)
Score 0
Code Size 5425 Byte
Status WA
Exec Time 8 ms
Memory 512 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 500
Status
AC × 3
AC × 11
WA × 5
Set Name Test Cases
Sample 00_example_01.txt, 00_example_02.txt, 00_example_03.txt
All 00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt
Case Name Status Exec Time Memory
00_example_01.txt AC 1 ms 256 KB
00_example_02.txt AC 1 ms 256 KB
00_example_03.txt AC 1 ms 256 KB
01.txt AC 6 ms 384 KB
02.txt AC 4 ms 384 KB
03.txt AC 1 ms 256 KB
04.txt AC 1 ms 256 KB
05.txt AC 7 ms 512 KB
06.txt AC 7 ms 512 KB
07.txt WA 2 ms 256 KB
08.txt WA 2 ms 256 KB
09.txt AC 1 ms 256 KB
10.txt WA 2 ms 256 KB
11.txt WA 5 ms 384 KB
12.txt WA 5 ms 384 KB
13.txt AC 8 ms 512 KB