AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC048-D An Ordinary Game
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("aba");
//Second
}
else if (InputPattern == "Input2") {
WillReturn.Add("abc");
//First
}
else if (InputPattern == "Input3") {
WillReturn.Add("abcab");
//First
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
string S = InputList[0];
var sb = new System.Text.StringBuilder(S);
// 両端の文字
char HeadChar = S[0];
char LastChar = S[S.Length - 1];
int CurrInd = 1;
int RemoveCnt = 0;
while (true) {
bool CanRemove = false;
int UB = sb.Length - 1;
if (CurrInd < UB) {
char Prev = sb[CurrInd - 1];
char Curr = sb[CurrInd];
char Next = sb[CurrInd + 1];
// 両端以外の文字なら消す
if (Curr != HeadChar && Curr != LastChar) {
if (Prev != Next) {
CanRemove = true;
}
}
}
if (CanRemove) {
sb.Remove(CurrInd, 1);
RemoveCnt++;
}
else {
if (CurrInd == UB) {
if (RemoveCnt % 2 == 0) {
Console.WriteLine("Second");
}
else {
Console.WriteLine("First");
}
return;
}
else {
CurrInd++;
}
}
}
}
}
解説
考察すると、両端と違う文字であれば
先頭から削除していっても勝敗は変わらないので
シュミレーションしてます。