AtCoder ABC 151 B – Achieve the Goal Python解説

スポンサーリンク

Achieve the Goal

高橋君は N 科目のテストを受けます。各テストは K 点満点であり、点数はそれぞれ 0 以上の整数です。
高橋君は N-1 科目のテストを既に受けており、i 番目の科目のテストの点数は Ai 点でした。
高橋君の目標は、N 科目のテストの平均点を M 点以上にすることです。
高橋君が目標を達成するためには、最後のテストで最低何点取る必要があるか出力してください。
達成不可能である場合は、代わりに -1 を出力してください。

AtCoder Beginner Contest 「Achieve the Goal」

高橋君が最後のテストで平均点M以上にするためには、科目数×目標平均点-それまでのテストの合計点数が必要になります。科目数×目標平均点-それまでのテストの合計点数を元に計算していきます。

n, k, m = map(int, input().split())
a = sum(list(map(int, input().split())))

c = max(0, n * m - a)

if c <= k:
    print(c)
else:
    print(-1)

科目数×目標平均点-それまでのテストの合計点数はn * m – aで表し、これをmax関数で0と比べています。平均点のために必要な点数がすでに取れている場合、必要な点数をマイナスにしないためです。

最後は条件文で必要な点数がテストの満点Kより小さければ、目標の平均点を取ることができるのでcを出力。満点であるKを超えていたら目標の平均点を取れないので-1を出力して完了です。

n, k, m = map(int, input().split())
a = sum(list(map(int, input().split())))

for i in range(k + 1):
    if (a + i) / n >= m:
        print(i)
        break
else:
    print(-1)

こちらはfor文で解く方法です。今回のケースではKは最大100までなので全探索でも大丈夫です。
あとは最後のテストの点数を含めた平均がm以上になるかループで確認します。m以上になれば点数を出力して完了です。