トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

AGC-003-A Wanna go back home

■■■問題■■■

高橋君は無限に広い2次元平面上に住んでいて、N日間の旅行をします。
高橋君の旅程は長さNの文字列Sであり、はじめは家にいます。
i(1 <= i <= N) 日目には、
●Sのi文字目がNなら北に
●Sのi文字目がWなら西に
●Sのi文字目がSなら南に
●Sのi文字目がEなら東に
正の距離だけ移動します。

高橋君は、各日の移動距離は決めていません。各日の移動距離をうまく決めることで、
高橋君がN日間の旅程をすべて消化したときに家にいるようにできるかどうか判定してください。

■■■入力■■■

S

●1 <= |S| <= 1000
●Sは文字N,W,S,Eのみからなる。

■■■出力■■■

高橋君が旅程をすべて消化したときに家にいるようにできる場合はYes,
そうでない場合はNoを出力せよ。


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "InputX";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("SENW");
            //Yes
            //毎日距離1ずつ進めばよいです
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("NSNNSNSN");
            //Yes
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("NNEW");
            //No
        }
        else if (InputPattern == "Input4") {
            WillReturn.Add("W");
            //No
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        string S = InputList[0];

        bool HasN = S.Contains('N');
        bool HasW = S.Contains('W');
        bool HasS = S.Contains('S');
        bool HasE = S.Contains('E');

        bool IsYes = true;

        if (HasN && HasS == false) IsYes = false;
        if (HasN == false && HasS) IsYes = false;

        if (HasW && HasE == false) IsYes = false;
        if (HasW == false && HasE) IsYes = false;

        Console.WriteLine(IsYes ? "Yes" : "No");
    }
}


解説

高橋君が家に戻れないケースを列挙してます。