AtCoderのARC    次のARCの問題へ    前のARCの問題へ

ARC145-A AB Palindrome


問題へのリンク


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("3");
            WillReturn.Add("BBA");
            //Yes
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("4");
            WillReturn.Add("ABAB");
            //No
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

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

        // 長さが2の場合
        if (S.Length == 2) {
            if (S == "AA" || S == "BB") {
                Console.WriteLine("Yes");
                return;
            }
            Console.WriteLine("No");
            return;
        }

        // 長さが3以上の場合
        if (S.Length >= 3) {
            if (S.StartsWith("A") && S.EndsWith("B")) {
                Console.WriteLine("No");
                return;
            }
            Console.WriteLine("Yes");
            return;
        }
    }
}


解説

長さごとで場合分けして考えます。

長さが1の場合は、必ず回文です。
長さが2の場合は、最初から回文の場合のみ回文です。
長さが3以上の場合は、

場合01 先頭がAで末尾がAの場合
後ろからABに変換することで
ABBBBBBBBA
にできます。

場合02 先頭がAで末尾がBの場合
これは、どうにもならないので不可です。

場合03 先頭がBで末尾がAの場合
後ろからABに変換することで
ABBBBBBBBA
にできます。

場合04 先頭がBで末尾がBの場合
先頭からABに変換することで
BAAAABAAAB
にできます。

以上の場合分けで解くことができます。