Submission #1966082


Source Code Expand

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Runtime.InteropServices;
using System.Runtime.Remoting.Messaging;
using System.Security.Principal;
using System.Text;
class Simple
{
    int N;
    string S;
    void Solve() {
        //input
        N = io.Int;
        S = io.String;
        //cal
        bool ans = false;
        var ring = new string[N];
        Func<string, string> rev = (str) => str == "S" ? "W" : "S";
        Func<string, bool> isHonest = (str) => str == "S";
        Func<char, bool> isSame = (cha) => cha == 'o';
        Action<string> initSame = (str) => ring[1] = ring[N - 1] = str;
        Action<string> initDiff = (str) => ring[1] = rev(ring[N - 1] = str);
        Action<string> initDiff2 = (str) => ring[N-1] = rev(ring[1] = str);
        Action<int, string> same = (index, str) => ring[index + 1] = ring[index - 1];
        Action<int, string> diff = (index, str) => ring[index + 1] = rev(ring[index - 1]);
        Action f = () => {
            for (int i = 1; i < N - 1; ++i) {
                if (isHonest(ring[i])) {
                    if (isSame(S[i])) {
                        same(i, ring[i]);
                    } else {
                        diff(i, ring[i]);
                    }
                } else {
                    if (isSame(S[i])) {
                        diff(i, ring[i]);
                    } else {
                        same(i, ring[i]);
                    }
                }
            }
        };
        Func<bool> finIsSame = () => ring[N - 2] == ring[0];
        Func<bool> finIsDiff = () => !finIsSame();
        Func<bool> isValid = () => {
            if (isHonest(ring[N - 1])) {
                if (isSame(S[N - 1])) {
                    return finIsSame();
                } else {
                    return finIsDiff();
                }
            } else {
                if (isSame(S[N - 1])) {
                    return finIsDiff();
                } else {
                    return finIsSame();
                }
            }
        };
        //羊1スタート
        //初回            
        ring[0] = "S";
        if (isSame(S[0])) {
            initSame(ring[0]);
        } else {
            initDiff(ring[0]);
        }
        //中間
        f();
        //最終チェック
        if (isValid()) {
            ans = true;
            //ansArr = ring.Clone() as string[];
            goto RET;
        }
        //羊2スタート
        //初回            
        ring[0] = "S";
        if (isSame(S[0])) {
            initSame(ring[0]);
        } else {
            initDiff2(ring[0]);
        }
        //中間
        f();
        //最終チェック
        if (isValid()) {
            ans = true;
            //ansArr = ring.Clone() as string[];
            goto RET;
        }
        //狼1スタート
        //初回        
        ring = new string[N];
        ring[0] = "W";
        if (isSame(S[0])) {
            initDiff(ring[0]);
        } else {
            initSame(ring[0]);
        }
        //中間
        f();
        //最終チェック
        if (isValid()) {
            ans = true;
            //ansArr = ring.Clone() as string[];
            goto RET;
        }
        //狼2スタート
        //初回        
        ring = new string[N];
        ring[0] = "W";
        if (isSame(S[0])) {
            initDiff2(ring[0]);
        } else {
            initSame(ring[0]);
        }
        //中間
        f();
        //最終チェック
        if (isValid()) {
            ans = true;
            //ansArr = ring.Clone() as string[];
            goto RET;
        }
RET:
       //ret
        if (ans) {
            for (int i = 0; i < N; ++i) {
                Console.Write(ring[i]);
            }
            Console.WriteLine("");
        } else {
            Console.WriteLine(-1);
        }
    }
    SimpleIO io = new SimpleIO();
    public static void Main(string[] args) => new Simple().Stream();
    void Stream() {
        //var exStdIn = new System.IO.StreamReader("stdin.txt");
        //System.Console.SetIn(exStdIn);        
        Solve();
        io.writeFlush();
    }
}
class SimpleIO
{
    string[] nextBuffer;
    int BufferCnt;
    char[] cs = new char[] { ' ' };
    StreamWriter sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
    public SimpleIO() {
        nextBuffer = new string[0];
        BufferCnt = 0;
        Console.SetOut(sw);
    }
    public string Next() {
        if (BufferCnt < nextBuffer.Length) return nextBuffer[BufferCnt++];
        string st = Console.ReadLine();
        while (st == "") st = Console.ReadLine();
        nextBuffer = st.Split(cs, StringSplitOptions.RemoveEmptyEntries);
        BufferCnt = 0;
        return nextBuffer[BufferCnt++];
    }
    public string String => Next();
    public char Char => char.Parse(String);
    public int Int => int.Parse(String);
    public long Long => long.Parse(String);
    public double Double => double.Parse(String);
    public void writeFlush() { Console.Out.Flush(); }
}

Submission Info

Submission Time
Task D - Menagerie
User rui0422
Language C# (Mono 4.6.2.0)
Score 0
Code Size 5373 Byte
Status WA
Exec Time 37 ms
Memory 14688 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 21 ms 9172 KB
00_example_02.txt AC 22 ms 11220 KB
00_example_03.txt AC 21 ms 9172 KB
01.txt AC 31 ms 10592 KB
02.txt AC 25 ms 9696 KB
03.txt AC 22 ms 9220 KB
04.txt WA 22 ms 9172 KB
05.txt AC 35 ms 11232 KB
06.txt AC 31 ms 12512 KB
07.txt WA 23 ms 11232 KB
08.txt AC 23 ms 11360 KB
09.txt AC 22 ms 9224 KB
10.txt WA 23 ms 11360 KB
11.txt WA 30 ms 14688 KB
12.txt WA 30 ms 10592 KB
13.txt AC 37 ms 13536 KB