A - アルバイトの給料計算 / Calculating Part-Time Job Pay 解説 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 では整数に上限がないため、特に気にする必要はありません。
アルゴリズム
- \(N\) を読み取る。
- 合計金額を保持する変数
totalを \(0\) で初期化する。 - \(N\) 回ループし、各行で \(A_i\) と \(T_i\) を読み取り、\(A_i \times T_i\) を
totalに加算する。 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 によって生成されました。
投稿日時:
最終更新: