問題へのリンク
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("5"); WillReturn.Add("3 3"); //Takahashi } else if (InputPattern == "Input2") { WillReturn.Add("4"); WillReturn.Add("3 3"); //Aoki } else if (InputPattern == "Input3") { WillReturn.Add("5"); WillReturn.Add("3 2"); //Takahashi } else if (InputPattern == "Input4") { WillReturn.Add("1000000000"); WillReturn.Add("1000000000 1"); //Takahashi } else { string wkStr; while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr); } return WillReturn; } static void Main() { List<string> InputList = GetInputList(); long N = long.Parse(InputList[0]); long[] wkArr = InputList[1].Split(' ').Select(pX => long.Parse(pX)).ToArray(); long A = wkArr[0]; long B = wkArr[1]; if (N <= A) { Console.WriteLine("Takahashi"); return; } if (A == B) { if (N % (A + 1) == 0) { Console.WriteLine("Aoki"); } else { Console.WriteLine("Takahashi"); } } if (A < B) { Console.WriteLine("Aoki"); } if (A > B) { Console.WriteLine("Takahashi"); } } }
場合1 N <= A の場合 これは先手が初手で、全部取って終わりです。 場合2 A = B の場合 (N,A,B)= (4,3,3) とすると Bの勝ち (N,A,B)= (5,3,3) とすると Aの勝ち (N,A,B)= (6,3,3) とすると Aの勝ち (N,A,B)= (7,3,3) とすると Aの勝ち (N,A,B)= (8,3,3) とすると Bの勝ち で N % (A+1) と先手後手で決まります。 場合3 A < B の場合 取れる数の差があるため、たくさん取れるほうが勝ちます。 1個取って、相手が取ってを繰り返せば、全部取れる状態に遷移できるからです。 場合4 A > B の場合 場合3と同様です。