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

ARC-028-A 小石を取るゲーム

■■■問題■■■

アリのAntさんとBugくんは小石を取るゲームをしています。
このゲームのルールは以下の通りです。

●最初、N個の小石が袋に入っています。
●Antさん、Bugさん、Antさん・・・の順番で交互に袋から小石を取っていきます。
●Antさんは1回につきちょうどA個の小石を取ります。
  ただし、袋の中の小石がA個未満である場合は、袋の中の全ての小石だけを取ります。
●Bugくんは1回につきちょうどB個の小石を取ります。
  ただし、袋の中の小石がB個未満である場合は、袋の中の全ての小石だけを取ります。
●自分のターンで袋を空にすると勝ちとなります。

Antさんはどちらがこのゲームに勝つかを計算してみることにしました。

■■■入力■■■

N A B

1行目には、最初に袋に入っている小石の数を表した整数 N(1 <= N <= 1000) と、
Antさんが一度に取る小石の個数を表した整数 A(1 <= A <= 1000) と、
Bugさんが一度に取る小石の個数を表した整数 B(1 <= B <= 1000) が
空白区切りで与えられる。

■■■出力■■■

勝者がAntさんである場合はAnt、
勝者がBugくんである場合はBugと1行に出力せよ。
出力の末尾に改行をいれること。


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("5 1 2");
            //Bug
            //以下のようにゲームが進行します。
            //●Antさんが小石を1つ取り出す。袋には4個の小石が残る。
            //●Bugくんが小石を2つ取り出す。袋には2個の小石が残る。
            //●Antさんが小石を1つ取り出す。袋には1個の小石が残る。
            //●袋には1個しか小石が入っていないので、Bugくんが小石を1つ取り出す。
            //●Bugくんのターンで袋が空になったのでBugくんの勝ちとなる。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("10 3 4");
            //Ant
            //2回目のAntさんのターンでちょうど袋が空になります
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        int[] wkArr = InputList[0].Split(' ').Select(X => int.Parse(X)).ToArray();
        int N = wkArr[0];
        int A = wkArr[1];
        int B = wkArr[2];

        bool IsAntTeban = true;
        while (true) {
            if (IsAntTeban) {
                if (N <= A) {
                    Console.WriteLine("Ant"); break;
                }
                N -= A; IsAntTeban = false;
            }
            else {
                if (N <= B) {
                    Console.WriteLine("Bug"); break;
                }
                N -= B; IsAntTeban = true;
            }
        }
    }
}


解説

ナイーブにシュミレーションしてます。