公式

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

Gemini 3.0 Flash (Thinking)

概要

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

考察

各アルバイトで得られる給料は、以下の計算式で求められます。 - 1番目のアルバイト:\(A_1 \times T_1\) 円 - 2番目のアルバイト:\(A_2 \times T_2\) 円 - … - \(N\) 番目のアルバイト:\(A_N \times T_N\) 円

これらをすべて合計したものが、高橋君が受け取る今月の給料の総額となります。 数式で表すと、求める答えは \(\sum_{i=1}^{N} (A_i \times T_i)\) です。

制約と注意点

  • 計算量: \(N\) が最大 \(10^5\) なので、1つずつ順番に計算して足し合わせる処理を \(N\) 回繰り返せば、制限時間内に十分間に合います。
  • 数値の大きさ: 答えの最大値は \(N \times A_i \times T_i = 10^5 \times 10^6 \times 10^6 = 10^{17}\) 程度になります。非常に大きな数値になりますが、Pythonは標準で多倍長整数(いくらでも大きな桁を扱える型)をサポートしているため、特別な対策をせずにそのまま計算しても正解できます。

アルゴリズム

  1. 合計金額を保持する変数 total_salary を \(0\) で初期化します。
  2. 入力から \(N\) を受け取ります。
  3. 以下の処理を \(N\) 回繰り返します(\(i = 1, 2, \dots, N\)):
    • \(i\) 番目のアルバイトの時給 \(A_i\) と労働時間 \(T_i\) を受け取ります。
    • \(A_i \times T_i\) を計算し、その結果を total_salary に加算します。
  4. 最終的な total_salary の値を出力します。

計算量

  • 時間計算量: \(O(N)\) \(N\) 個のアルバイトについて 1 回ずつ掛け算と足し算を行うため、処理時間は \(N\) に比例します。
  • 空間計算量: \(O(N)\) 今回の実装では sys.stdin.read().split() を用いて入力データをすべて一度にリストへ格納しているため、入力の個数 \(N\) に比例したメモリを使用します。

実装のポイント

  • 高速な入力: \(N\) が \(10^5\) と大きいため、input() を \(N\) 回呼び出すよりも、sys.stdin.read().split() を使って一括で読み込む方が実行時間を短縮できます。

  • インデックスの管理: 一括読み込みをした場合、リストの 0 番目が \(N\)、1 番目以降に \(A_1, T_1, A_2, T_2, \dots\) と並びます。\(i\) 番目のアルバイトの情報がリストのどこにあるかを 2 * i + 1 のような式で正しく指定することが重要です。

    ソースコード

import sys

def main():
    # 標準入力からすべてのデータを読み込み、空白文字で分割します
    input_data = sys.stdin.read().split()
    
    # 入力が空の場合は終了します
    if not input_data:
        return
    
    # 最初の値はアルバイトの種類数 N です
    n = int(input_data[0])
    
    total_salary = 0
    # 各アルバイトの時給 A_i と 働いた時間 T_i を順に処理します
    for i in range(n):
        # input_data[1] から順に A1, T1, A2, T2, ... と並んでいます
        a = int(input_data[2 * i + 1])
        t = int(input_data[2 * i + 2])
        # 給料を加算します
        total_salary += a * t
        
    # 合計金額を出力します
    print(total_salary)

if __name__ == '__main__':
    main()

この解説は gemini-3-flash-thinking によって生成されました。

投稿日時:
最終更新: