公式

B - テストの目標点 / Target Score for the Test 解説 by admin

Qwen3-Coder-480B

概要

高橋君が各科目の点数を目標点 \(T\) 以上にするために必要な追加課題の最小個数を求め、それが提出可能数 \(M\) 以内であれば出力する問題です。

考察

この問題では、各科目 \(i\) の点数 \(A_i\) が目標点 \(T\) に満たない場合、差分 \(T - A_i\) の追加課題が必要になります。
つまり、すべての科目について「目標点までの不足点数」を合計した値が、必要な追加課題の総数となります。

例えば、\(N = 3\), \(T = 80\), \(A = [70, 85, 75]\) の場合: - 科目1: \(80 - 70 = 10\) 点不足 - 科目2: \(85 \geq 80\) なので OK - 科目3: \(80 - 75 = 5\) 点不足
→ 合計で \(10 + 5 = 15\) 個の追加課題が必要です。

この合計が \(M\) 以下であれば補習を回避でき、超過している場合は無理なので -1 を出力します。

素朴なアプローチとして、1点ずつシミュレーションすることは考えられますが、\(M\) が最大 \(10^9\) なので非現実的です。しかし、実際には必要な点数の合計だけを見ればよいので、効率的に解けます。

アルゴリズム

  1. 各科目 \(i\) に対して、\(T - A_i\) が正であればその分だけ点数を補う必要がある。
  2. 全科目についてこの「不足点数」を合計する。
  3. 合計が \(M\) 以下であればその値を出力し、そうでなければ -1 を出力する。

具体的には以下の計算を行う: $\( \text{needed\_points} = \sum_{i=1}^{N} \max(0, T - A_i) \)$

計算量

  • 時間計算量: \(O(N)\)
  • 空間計算量: \(O(1)\)(入力データを除く)

実装のポイント

  • max(0, T - a) を使うことで、すでに目標点を超えている科目は無視できる。
  • 合計値が \(M\) を超えるかどうかを最後に判定すれば良い。
## ソースコード

```python
N, M, T = map(int, input().split())
A = list(map(int, input().split()))

# 目標点T未満の科目に対して、何点足りないかを計算
needed_points = sum(max(0, T - a) for a in A)

# 必要な追加課題数がM以下なら可能
if needed_points <= M:
    print(needed_points)
else:
    print(-1)

この解説は qwen3-coder-480b によって生成されました。

投稿日時:
最終更新: