Official

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

GPT 5.4 High

概要

各アルバイトについて「時給 \(\times\) 働いた時間」を計算し、それらをすべて足し合わせれば今月の給料の合計が求まります。

考察

\(i\) 番目のアルバイトで受け取る金額は、時給が \(A_i\) 円、労働時間が \(T_i\) 時間なので

\(A_i \times T_i\)

円です。
したがって、求めたい答えは

\(A_1T_1 + A_2T_2 + \cdots + A_NT_N\)

です。

例えば、

  • アルバイト1: 時給 \(1000\) 円、\(3\) 時間 → \(3000\)
  • アルバイト2: 時給 \(1200\) 円、\(2\) 時間 → \(2400\)

なら、合計は \(3000 + 2400 = 5400\) 円です。

素朴な考え方

「1時間ごとに時給を足していく」という方法も考えられます。
しかし、\(T_i\) は最大 \(10^6\) で、アルバイトの種類数 \(N\) は最大 \(10^5\) なので、時間ごとに処理すると非常に無駄です。

実際には、1つのアルバイトについてまとめて \(A_i \times T_i\) を計算すればよいので、各アルバイトを1回ずつ見るだけで十分です。

アルゴリズム

  1. \(N\) を入力する。
  2. 合計金額を表す変数 total\(0\) で初期化する。
  3. 各アルバイトについて、時給 \(A_i\) と労働時間 \(T_i\) を入力する。
  4. total += A_i * T_i を行う。
  5. 最後に total を出力する。

計算量

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

実装のポイント

  • 各行を読んで、その場で a * t を合計に加えればよく、配列に保存する必要はありません。

  • 合計金額は最大でおおよそ \(10^5 \times 10^6 \times 10^6 = 10^{17}\) になる可能性があります。Python の整数型なら問題なく扱えます。

  • 提示コードでは sys.stdin.buffer.readline を使って高速に入力していますが、この問題では本質は「積を足し合わせる」ことです。

    ソースコード

import sys

def main():
    input = sys.stdin.buffer.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.4-high によって生成されました。

posted:
last update: