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 |
|
|
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 |