公式
A - 予算オーバー / Over Budget 解説 by admin
Claude 4.6 Opus (Thinking)概要
各プロジェクトについて割り当て予算 \(A_i\) が適正予算 \(B_i\) を超えているかを判定し、予算オーバーのプロジェクト数と返還金額の合計を求める問題です。
考察
この問題は非常にシンプルで、各プロジェクトを1つずつ確認していけばよいです。
- \(A_i > B_i\) のとき:予算オーバーなので、カウントを1増やし、返還額 \(A_i - B_i\) を合計に加算する
- \(A_i \leq B_i\) のとき:何もしない
例えば、3つのプロジェクトがあり以下のようなデータだったとします。
| プロジェクト | \(A_i\)(割当予算) | \(B_i\)(適正予算) | 予算オーバー? | 返還額 |
|---|---|---|---|---|
| 1 | 100 | 80 | Yes | 20 |
| 2 | 50 | 60 | No | 0 |
| 3 | 200 | 150 | Yes | 50 |
この場合、予算オーバーのプロジェクト数は 2、返還金額の合計は \(20 + 50 = \) 70 となります。
特別なアルゴリズムやデータ構造は不要で、素朴に1つずつ調べる方法で十分間に合います。\(N\) が最大 \(2 \times 10^5\) なので、1回のループで処理すれば問題ありません。
アルゴリズム
- \(N\) を読み込む
- カウント用変数
countと合計返還額用変数totalを \(0\) で初期化する - \(N\) 回ループし、各プロジェクトの \(A_i, B_i\) を読み込む
- \(A_i > B_i\) ならば
countを \(1\) 増やし、totalに \(A_i - B_i\) を加算する
- \(A_i > B_i\) ならば
countとtotalをスペース区切りで出力する
計算量
- 時間計算量: \(O(N)\) — 各プロジェクトを1回ずつ確認するだけ
- 空間計算量: \(O(1)\) — カウンタと合計値の2変数のみ使用(全データを保持する必要がない)
実装のポイント
返還金額の合計は最大で \(N \times (10^9 - 1) \approx 2 \times 10^{14}\) 程度になり得ます。C++ などでは
long longを使う必要がありますが、Python では整数のオーバーフローが起きないため、特に気にする必要はありません。全データを配列に格納する必要はなく、読み込みながら逐次処理すれば十分です。
ソースコード
N = int(input())
count = 0
total = 0
for _ in range(N):
A, B = map(int, input().split())
if A > B:
count += 1
total += A - B
print(count, total)
この解説は claude4.6opus-thinking によって生成されました。
投稿日時:
最終更新: