公式
A - オンラインセールの購入計画 / Online Sale Purchase Plan 解説 by admin
Qwen3-Coder-480B概要
オンラインセールで出品される商品のうち、特定の時間帯に出品され、かつ一定以上の価格を持つ商品のお得度の合計を求めます。
考察
この問題では、\(N\) 個の商品それぞれに対して以下の2つの条件を確認する必要があります:
- 商品の出品開始時刻 \(T_i\) が、高橋君の閲覧可能時間帯 \(S\) 以上 \(E\) 以下であるか
- 商品の価格 \(H_i\) が \(K\) 円以上であるか
これらの条件を両方満たす商品について、その「お得度」\(B_i\) を加算していきます。
素朴な方法としては、すべての商品について上記の条件を順番にチェックする方法があります。これは各商品につき定数時間で判定できるので、全体でも十分高速です。制約より \(N\) は最大で \(2 \times 10^5\) なので、\(O(N)\) の計算量でも間に合います。
もし商品数がさらに多く、例えば数百万件を超えるような場合には、時刻や価格などでソートしたり、二分探索などを用いる必要が出てくるかもしれませんが、今回の制約ではその必要はありません。
アルゴリズム
- 最初に入力から \(N, K, S, E\) を受け取ります。
- 次に、\(N\) 個の商品情報を1つずつ読み込みながら、以下の条件を確認します:
- 出品開始時刻 \(T\) が \(S \leq T \leq E\) を満たすか?
- 価格 \(H\) が \(H \geq K\) を満たすか?
- 両方の条件を満たす場合、その商品のお得度 \(B\) を合計値に加算します。
- 全ての商品を処理した後、合計値を出力します。
計算量
- 時間計算量: \(O(N)\)
→ 各商品を一度だけ確認しているため。 - 空間計算量: \(O(1)\)
→ 追加のデータ構造を使用せず、変数のみを使用しているため。
実装のポイント
- 条件式
S <= T <= EとH >= Kの両方が成り立つときにだけ、お得度を足すことを忘れないようにしましょう。 - 入力はすべて整数ですが、特に大きな値(最大 \(10^9\))を取りうるので、int型で扱って問題ありません。
- 条件を満たす商品がない場合でも、0を出力すれば正しく動作します。
## ソースコード
```python
# 入力の読み込み
N, K, S, E = map(int, input().split())
total_benefit = 0
# 各商品について処理
for _ in range(N):
T, H, B = map(int, input().split())
# 条件:時刻S以上E以下 かつ 価格K以上
if S <= T <= E and H >= K:
total_benefit += B
# 結果の出力
print(total_benefit)
この解説は qwen3-coder-480b によって生成されました。
投稿日時:
最終更新: