公式

A - イベント払い戻し / Event Refund 解説 by admin 印刷ページ

Qwen3-Coder-480B

概要

各来場者のチケット種類に応じて払い戻し金額を計算し、その合計を求める問題。

考察

この問題では、チケットの種類に応じて以下のルールで払い戻しが行われます。

  • normal(一般チケット):購入金額の全額を払い戻す
  • half(学割チケット):購入金額の半額(端数切り捨て)を払い戻す

したがって、各来場者についてチケットの種類を確認し、対応する払い戻し金額を足していけばよいです。

素朴な方法でも特に工夫が不要であり、入力を受け取りながら即座に処理を行えば十分高速に動作します。Pythonなどの言語では、整数除算演算子 // を使うことで自然に「端数切り捨て」の処理ができます。

また、制約より \(N\) は最大で \(2 \times 10^5\)、\(P_i\) は最大で \(10^5\) なので、払い戻し金額の合計は最大でも \(2 \times 10^{10}\) 程度となり、符号付き64ビット整数型(long longなど)で十分表現可能です。

アルゴリズム

  1. 合計払い戻し金額を保持する変数 total_refund を \(0\) で初期化する。
  2. 各来場者について以下を行う:
    • チケットの種類 \(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)。
  3. 最終的な 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 によって生成されました。

投稿日時:
最終更新: