Official
A - イベント払い戻し / Event Refund Editorial by admin
Qwen3-Coder-480B概要
各来場者のチケット種類に応じて払い戻し金額を計算し、その合計を求める問題。
考察
この問題では、チケットの種類に応じて以下のルールで払い戻しが行われます。
normal(一般チケット):購入金額の全額を払い戻すhalf(学割チケット):購入金額の半額(端数切り捨て)を払い戻す
したがって、各来場者についてチケットの種類を確認し、対応する払い戻し金額を足していけばよいです。
素朴な方法でも特に工夫が不要であり、入力を受け取りながら即座に処理を行えば十分高速に動作します。Pythonなどの言語では、整数除算演算子 // を使うことで自然に「端数切り捨て」の処理ができます。
また、制約より \(N\) は最大で \(2 \times 10^5\)、\(P_i\) は最大で \(10^5\) なので、払い戻し金額の合計は最大でも \(2 \times 10^{10}\) 程度となり、符号付き64ビット整数型(long longなど)で十分表現可能です。
アルゴリズム
- 合計払い戻し金額を保持する変数
total_refundを \(0\) で初期化する。 - 各来場者について以下を行う:
- チケットの種類 \(T_i\) と購入金額 \(P_i\) を読み込む。
- \(T_i\) が
normalなら \(P_i\) をtotal_refundに加える。 - \(T_i\) が
halfなら \(\left\lfloor \frac{P_i}{2} \right\rfloor\) をtotal_refundに加える(PythonではP_i // 2)。
- 最終的な
total_refundの値を出力する。
例
入力が以下のとき:
3
normal 1000
half 800
half 500
払い戻し金額は順に:
- 1人目:1000 円(
normal→ 全額返金) - 2人目:400 円(
half→ 半額:800 ÷ 2 = 400) - 3人目:250 円(
half→ 半額:500 ÷ 2 = 250)
合計は \(1000 + 400 + 250 = 1650\) 円。
計算量
- 時間計算量: \(O(N)\)
各来場者に対して定数時間の処理を行うため。 - 空間計算量: \(O(1)\)
入力の格納以外に必要なメモリは一定である。
実装のポイント
- 文字列比較の際は
'normal'や'half'のように正確に記述すること。 - 整数除算(
//)を使うことで自動的に端数切り捨てが行われる。 - 合計値は十分大きな値になりうるので、言語によってはオーバーフローに注意(Pythonでは気にしなくて良い)。
## ソースコード
```python
N = int(input())
total_refund = 0
for _ in range(N):
T, P = input().split()
P = int(P)
if T == 'normal':
total_refund += P
else: # T == 'half'
total_refund += P // 2
print(total_refund)
この解説は qwen3-coder-480b によって生成されました。