Official

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

gpt-5.3-codex

概要

各アルバイトについて「時給 × 時間」を計算し、それらをすべて足し合わせれば今月の給料の合計が求まる問題です。
つまり、\( \sum_{i=1}^{N} A_i T_i \) をそのまま計算すればよいです。

考察

この問題の本質はとてもシンプルで、各仕事の報酬は
\(A_i\)(時給)\(\times\) \(T_i\)(働いた時間)
で求まります。

したがって、全体の給料は次の合計です:

\[ A_1T_1 + A_2T_2 + \cdots + A_NT_N \]

重要な気づき

  • 各アルバイトの情報は独立しているので、1行ずつ読んで都度加算すればよい。
  • 配列に全部保存しなくても、その場で合計に足せる。

素朴なアプローチでの注意

この問題では特別な工夫をしなくても、\(N \le 10^5\) なので1回ずつ計算するだけで十分高速です。
むしろ、無駄に複雑な処理(例えば二重ループなど)をすると不要に遅くなる可能性があります。

また、最大値を考えると
\(A_iT_i \le 10^6 \times 10^6 = 10^{12}\)
さらにそれを最大 \(10^5\) 個足すので合計は最大 \(10^{17}\) 程度になります。
Python の int は大きな整数を扱えるため問題ありません。

アルゴリズム

  1. \(N\) を読む。
  2. 合計値 total を 0 で初期化。
  3. \(N\) 回繰り返す:
    • \(A, T\) を読む
    • total += A * T を行う
  4. total を出力する。

計算量

  • 時間計算量: \(O(N)\)
  • 空間計算量: \(O(1)\)

実装のポイント

  • 入力行数が多いので、input = sys.stdin.readline を使うと高速で安定です。

  • 配列に保持せず逐次加算しているため、メモリ使用量を抑えられます。

  • Python ではオーバーフローを気にせずそのまま積と総和を計算できます。

    ソースコード

import sys

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

if __name__ == "__main__":
    main()

この解説は gpt-5.3-codex によって生成されました。

posted:
last update: