AtCoder ABC 210 B – Bouzu Mekuri Python解説

スポンサーリンク

Bouzu Mekuri

N 枚のカードからなる山札があります。
それぞれのカードは、「良いカード」か「悪いカード」かのどちらかです。
高橋君と青木君は、この山札を使って対戦ゲームをします。
このゲームでは、2 人は交互に山札の一番上のカードを引いて、そのカードを食べます。
先に悪いカードを食べたプレイヤーの負けです。(ここで、山札には少なくとも 1 枚の悪いカードが含まれていることが保証されます。)
0 と 1 からなる文字列 S が与えられます。i=1,2,…,N について、
S の i 文字目が 0 のとき、山札の上から i 番目のカードが良いカードであることを表します。
S の i 文字目が 1 のとき、山札の上から i 番目のカードが悪いカードであることを表します。
高橋君が先手でゲームを始めるとき、高橋君と青木君のどちらが負けるかを答えてください。

AtCoder Beginner Contest「Bouzu Mekuri」

問題文が長いですが、最初に1を引いた方が負けで、高橋君と青木君のどちらが負けてしまったかを答える問題です。

山札を1枚ずつ調べていき、1が出るのが偶数番目か奇数番目かで判定していきます。高橋君が先手なので、データ上偶数番目に1が出たら高橋君の負け、奇数番目に1が出たら青木君の負けになります。

n = int(input())
s = input()

for i in range(n):
    if s[i] == "1":
        if i % 2 == 0:
            print("Takahashi")
            break
        else:
            print("Aoki")
            break

if i % 2 == 0で偶数番目で1を引いたか、奇数番目で1を引いたかを見ています。偶数番目なら高橋君の負けで、奇数番目なら青木君の負けなので、名前を出力して完了です。

AtCoderB問題

Posted by cheese