A - アルバイトの給料計算 / Calculating Part-Time Job Pay 解説 by admin
GPT 5.2 High概要
各スタッフのシフト回数 \(C_i\) に応じて「1回あたりの単価」が変わるので、全員分の給与をそのまま合計して求める問題です。
考察
重要なのは、特別手当 \(B\) が「条件を満たしたスタッフの“全シフト”に上乗せされる」という点です。
つまり、スタッフ \(i\) について
- \(C_i \ge K\) なら 1回あたり \(P+B\) 円
- \(C_i < K\) なら 1回あたり \(P\) 円
となり、給与はそれぞれ
- \(C_i(P+B)\) または \(C_iP\)
で一発で計算できます。
やりがちな誤り(WAの原因)として、例えば「\(K\) 回目以降のシフトだけに \(B\) を付ける」と勘違いして \( (C_i-K)B \) のように計算してしまうケースがあります。しかし本問は「\(K\) 回以上なら全シフトが対象」なので、条件を満たすなら \(C_iB\) を丸ごと加算します。
具体例:\(P=1000, B=200, K=5, C_i=6\) のとき
- 正しい:\(6 \times (1000+200)=7200\)
- 誤り例:\((6 \times 1000) + (6-5)\times 200=6200\)(条件の解釈違い)
アルゴリズム
- 入力として \(N, P, B, K\) と各 \(C_i\) を受け取る。
- 合計
totalを \(0\) で初期化する。 - 各スタッフについて以下を加算する:
- まず基本給として \(C_i \times P\) を加算
- さらに \(C_i \ge K\) なら特別手当として \(C_i \times B\) を加算
totalを出力する。
(コードでは「常に \(C_iP\) を足し、条件を満たすときだけ \(C_iB\) を追加」という形にしており、分岐がシンプルになります。)
計算量
- 時間計算量: \(O(N)\)(各スタッフを1回ずつ処理するだけ)
- 空間計算量: \(O(1)\)(合計を持つだけ。入力配列を除けば定数)
実装のポイント
条件は「\(C_i \ge K\)」であることに注意(等号を忘れない)。
特別手当は「全シフトに対して」なので、加算は \(C_i \times B\)。
合計金額は最大でも \(100 \times 31 \times (1000+1000)=6{,}200{,}000\) 程度なので、Python の
intで問題ありません。ソースコード
import sys
def main():
data = list(map(int, sys.stdin.read().split()))
N, P, B, K = data[0], data[1], data[2], data[3]
C = data[4:4+N]
total = 0
for ci in C:
total += ci * P
if ci >= K:
total += ci * B
print(total)
if __name__ == "__main__":
main()
この解説は gpt-5.2-high によって生成されました。
投稿日時:
最終更新: