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
にできます。
以上の場合分けで解くことができます。