誤読

文字通りくそコード

ARC069-D Menagerie

蟻本でのすごい既視感
完全に食物連鎖だ!UF!勝利!優勝!
ではなかったのでね
UFでうまくできそうではあるんだけど、いまいちわからなかったので
思考停止メモ化再帰をした
思考停止で解けるようになったのはそれはそれで嬉しかったりもする
完全に原始人コード

int n;
int s[100001];
int ans[100001];
 
int dp [100001] [2] [2] [2] [2];
 
bool dfs(int cur, int bbk, int bk, int ck, int ek) {
	if (cur == n - 1) {
		ans[n-1] = ek;
		
		bool f = 0;
		if (ck) {
			if (s[cur] && ans[0] == ans[n - 2])
				f = 1;
			else if (!s[cur] && ans[0] != ans[n - 2])
				f = 1;
		}
		else {
			if (s[cur] && ans[0] != ans[n - 2])
				f = 1;
			else if (!s[cur] && ans[0] == ans[n - 2])
				f = 1;
		}
		if (f && ck == ek) {
			REP(i,n) {
				printf("%c",ans[i]?'S':'W');
			}
			printf("\n");
			return 1;
		}
		return 0;
 
	}
	if (dp[cur][bbk][ck][ck][ek] != -1)
		return dp[cur][bbk][ck][ck][ek];
 
	int nk;
	if (ck) {
		if (s[cur])
			nk = bk;
		else
			nk = 1 - bk;
	}
	else {
		if (s[cur])
			nk = 1-bk;
		else
			nk = bk;
	}
	ans[cur] = ck;
	ans[cur-1] = bk;
	return  dp[cur][bbk][ck][ck][ek] = dfs(cur + 1, bk, ck, nk, ek);
}
 
signed main() {
	scanf("%d%*c", &n);
	REP(i, n) {
		char c;
		scanf("%c", &c);
		s[i] = c == 'o';
	}
	Fill(dp, -1);
	if (s[0]) {
		if (dfs(1, 1, 1, 1, 1))
			return 0;
		if(dfs(1, 0, 1, 0, 0))
			return 0;
		if (dfs(1, 1, 0, 0, 1))
			return 0;
		if (dfs(1, 0, 0, 1, 0))
			return 0;
	}
	else {
		if (dfs(1, 1, 1, 0, 1))
			return 0;
		if (dfs(1, 0, 1, 1, 0))
			return 0;
		if (dfs(1, 1, 0, 1, 1))
			return 0;
		if (dfs(1, 0, 0, 0, 0))
			return 0;
	}
	printf("-1\n");
	return 0;
}