AtCoder Beginner Contest

【pythonでABC190を解説】A - Very Very Primitive Game

問題概要

問題ページ

問題文

高橋くんと青木くんがゲームを行います。
はじめ、高橋くんは \(A\) 個、青木くんは \(B\) 個のアメを持っています。
\(C=0\) ならば高橋くんが先手、\(C=1\) ならば青木くんが先手で、高橋くんと青木くんは以下の操作を交互に繰り返します。

  • 自分の持っているアメを \(1\) 個食べる。

先に操作を行えなくなった者の負けです。どちらが勝つでしょうか?

制約

  • 入力は全て整数
  • \(0 ≤ A, B ≤ 100\)
  • \(C \in \{0, 1\}\)

問題の考察

A問題にしては少し面倒な問題。

for文で愚直に処理した方が直感的にコーディングできる印象。

for文で解答する

  • forをcからスタート
  • iの値が偶数ならa(高橋君の値)を-1
  • iの値が奇数ならb(青木君の値)を-1
  • aが0未満なら青木君の勝利
  • bが0未満なら高橋君の勝利

if文で場合分けする時に、aとbの値が異なる場合には値が大きい方が勝利します。

a == bの場合のみ、cの値によって勝敗の結果が変わるので次のような場合分けになります。

if文で場合分け

  • a > bの場合
    • 高橋君の勝利
  • a < bの場合
    • 青木君の勝利
  • a == bの場合
    • c == 0の場合
      • 青木君の勝利
    • c == 1の場合
      • 高橋君の勝利

たびすけ
コーディング量もそこまで変わらないので提出はfor文でしました!!

ACコード

for文で解答

import sys


def solve():
    input = sys.stdin.readline
    mod = 10 ** 9 + 7
    a, b, c = list(map(int, input().rstrip('\n').split()))
    for i in range(c, 10 ** 5):
        if i % 2 == 0:
            a -= 1
            if a < 0:
                print("Aoki")
                exit()
        else:
            b -= 1
            if b < 0:
                print("Takahashi")
                exit()


if __name__ == '__main__':
    solve()

if文で場合分け

import sys


def solve():
    input = sys.stdin.readline
    mod = 10 ** 9 + 7
    a, b, c = list(map(int, input().rstrip('\n').split()))
    if a > b:
        print("Takahashi")
    elif a < b:
        print("Aoki")
    else:
        if c == 0:
            print("Aoki")
        else:
            print("Takahashi")


if __name__ == '__main__':
    solve()

-AtCoder Beginner Contest
-