ebisukeプログラミング初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。Arduinoで電子工作も

AtCoder-ABC210 A - Cabbages / B - Bouzu Mekuri【Python解答例】

f:id:ebisuke33:20210717221820p:plain


AtCoder Beginner Contest210のA とB問題についてPythonの解答例を記事にしていきます。
AtCoder Beginner Contest 210 - AtCoder



AtCoder Beginner Contest210 A - Cabbages

A - Cabbages

問題文

高橋君はキャベツ屋さんにやってきました。

キャベツ屋さんでは、 キャベツを 1 個 X 円で買うことができます。
ただし、キャベツを A 個よりも多く買う場合、A+1 個目以降に買うキャベツについては 1 個 Y 円で買うことができます。(ここで、Y

制約

・1≤N≤10^5
・1≤A≤10^5
・1≤Y

解答例

n, a, x, y = map(int,input().split())

if n > a:
    ans = a * x + (n-a) * y
else:
    ans = n * x

print(ans)

解説

A個より多く買うと割引がある条件でキャベツをN個買うとき、支払う金額を答える問題です。

購入数がA個より多いときは割引が受けられますので、割引前の金額xでa個買い、割引後の金額yで(n-a)個買った合計金額がansとなります。

購入数がA個以下のとき単価xでn個買った金額がansです。

解答となるansを出力すればACでした。


AtCoder Beginner Contest210 B - Bouzu Mekuri

B - Bouzu Mekuri

問題文

N 枚のカードからなる山札があります。
それぞれのカードは、「良いカード」か「悪いカード」かのどちらかです。

高橋君と青木君は、この山札を使って対戦ゲームをします。
このゲームでは、2 人は交互に山札の一番上のカードを引いて、そのカードを食べます。
先に悪いカードを食べたプレイヤーの負けです。(ここで、山札には少なくとも 1 枚の悪いカードが含まれていることが保証されます。)

0 と 1 からなる文字列 S が与えられます。i=1,2,…,N について、

・S の i 文字目が 0 のとき、山札の上から i 番目のカードが良いカードであることを表します。
・S の i 文字目が 1 のとき、山札の上から i 番目のカードが悪いカードであることを表します。
高橋君が先手でゲームを始めるとき、高橋君と青木君のどちらが負けるかを答えてください。

制約

・1≤N≤10^5
・N は整数
・S は 0 と 1 からなる長さ N の文字列
・S は少なくとも 1 個の 1 を含む。

解答例

n = int(input())

s = input()

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

解説

0と1からなる山札を順番にめくっていき、最初に1を引く人を答える問題です。

山札を表すSについて1枚目から順に調べていき、1が出るのが奇数番目なら高橋くん、偶数番目なら青木くんが負けになります。

1が出る偶奇を調べ、それに合わせて答えを出力すればOKでした。


ABC210の関連記事はこちら
ebisuke33.hatenablog.com
ebisuke33.hatenablog.com