Official

A - アルバイトの給料計算 / Calculating Part-Time Job Pay Editorial by admin

Claude 4.6 Opus (Thinking)

概要

\(N\) 種類のアルバイトそれぞれについて「時給 × 働いた時間」を計算し、その合計を求める問題です。

考察

この問題はシンプルな計算問題です。各アルバイトで得られる給料は「時給 \(A_i\) × 時間 \(T_i\)」で求まるので、それを全種類分足し合わせればよいです。

例えば、以下のような入力を考えます:

3
1000 8
1200 5
900 3
  • 1番目のアルバイト: \(1000 \times 8 = 8000\)
  • 2番目のアルバイト: \(1200 \times 5 = 6000\)
  • 3番目のアルバイト: \(900 \times 3 = 2700\)
  • 合計: \(8000 + 6000 + 2700 = 16700\)

特に難しいアルゴリズムは必要なく、素朴にループで足し合わせるだけで十分間に合います。

オーバーフローについて: \(A_i\)\(T_i\) の最大値はそれぞれ \(10^6\) なので、1つのアルバイトで最大 \(10^{12}\) 円、\(N\) が最大 \(10^5\) なので合計は最大 \(10^{17}\) 程度になります。C++ などでは long long を使う必要がありますが、Python では整数に上限がないため、特に気にする必要はありません。

アルゴリズム

  1. \(N\) を読み取る。
  2. 合計金額を保持する変数 total\(0\) で初期化する。
  3. \(N\) 回ループし、各行で \(A_i\)\(T_i\) を読み取り、\(A_i \times T_i\)total に加算する。
  4. total を出力する。

数式で書くと、求める答えは以下の通りです:

\[\text{合計} = \sum_{i=1}^{N} A_i \times T_i\]

計算量

  • 時間計算量: \(O(N)\) — 各アルバイトについて1回ずつ掛け算と足し算を行うだけです。
  • 空間計算量: \(O(1)\) — 合計を保持する変数1つだけで済みます(入力を保存する必要はありません)。

実装のポイント

  • Python では整数のオーバーフローを気にする必要がないため、素直に A * T を足していくだけで正しい結果が得られます。

  • 各アルバイトの情報は1行ずつ読み取って即座に計算に使い、配列に保存する必要はありません。これにより空間計算量を \(O(1)\) に抑えられます。

    ソースコード

N = int(input())
total = 0
for _ in range(N):
    A, T = map(int, input().split())
    total += A * T
print(total)

この解説は claude4.6opus-thinking によって生成されました。

posted:
last update: