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

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

AtCoder-ABC207 A - Repression / B - Hydrate【Python解答例】

f:id:ebisuke33:20210626221313p:plain

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



AtCoder Beginner Contest207 A - Repression

A - Repression

問題文

机の上に、正整数が書かれた 3 枚のカードがあります。
3 枚のカードにはそれぞれ整数 A,B,C が書き込まれています。

いま、この中からちょうど 2 枚のカードを選んで手に持ちました。

手に持ったカードに書き込まれた整数の和として考えられる最大値を求めてください。

制約

・1≤A,B,C≤100
・入力は全て整数

解答例

ABC = list(map(int,input().split()))

ABC.sort(reverse=True)

ans = ABC[0] + ABC[1]

print(ans)

解説

3枚あるカードから2枚選ぶとき、そのカードに書かれた整数の和の最大値を答える問題です。

3枚のカードの値をABCリストとして、降順でソートします。

リストの1番目の値と2番目の値を足し合わせたans変数が、求める解答になります。



AtCoder Beginner Contest207 B - Hydrate

B - Hydrate

問題文

水色のボールが A 個容器に入っています。高橋くんはこの容器に対し、以下の操作を 0 回以上好きなだけ繰り返します。

・水色のボール B 個と赤色のボール C 個を容器に追加する。
高橋くんの目標は、容器に入っている水色のボールの個数が赤色のボールの個数の D 倍以下になるようにすることです。

目標が達成可能かを判定し、可能なら必要な操作回数の最小値を求めてください。

制約

・1≤A,B,C,D≤10^5
・入力は全て整数である。

解答例

a, b, c, d = map(int,input().split())

ans = -1
for i in range(10**6):
    if a + (i * b) <= (i * c) * d:
        ans = i
        break

print(ans)

解説

A個の水色ボールが入った容器に、水色B個と赤色C個のボールを追加できます。
容器に入った水色ボールの数が赤色ボールの数×D個以下にできるか、できるなら操作回数を答える問題です。

最大の操作回数は10^5 + αになる(はずな)ので、余裕をみて10^6回の操作を上限としてループ処理しました。

操作回数×b個の水色ボールと操作回数×C個の赤色ボールが増えていきますので、操作ごとに問題文の目標が達成できているか判定します。

もし、達成したらループをbreakさせて、操作回数のiを答えます。

達成することなくループを抜けたら、達成不能を表す-1が出力されるのでACでした。



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