公式

A - 中古車の選定 / Used Car Selection 解説 by admin

GPT 5.2 High

概要

各中古車について「価格が \(L \le P_i \le R\)」かつ「走行距離が \(K_i \le M\)」を満たすかを判定し、条件を満たす台数を数える問題です。

考察

この問題でやることは非常にシンプルで、各車が条件を満たすかどうかを独立に判定して数えるだけです。
車同士の比較や最適化は不要で、条件は「AND(両方満たす)」になっています。

  • 例えば \(L=200, R=300, M=50000\) のとき
    • \((P,K)=(250, 40000)\) は両方満たすのでカウントする
    • \((P,K)=(150, 40000)\) は価格が範囲外なのでカウントしない
    • \((P,K)=(250, 60000)\) は走行距離が超過なのでカウントしない

\(N \le 10^5\) なので、全ての車を1回ずつ確認する素朴な方法(全探索)で十分間に合います。
逆に、ここでソートや複雑なデータ構造を使う必要はありません(実装が重くなるだけで、計算量的にも得をしません)。

アルゴリズム

  1. 入力で \(N, L, R, M\) を受け取る
  2. 答え用の変数 ans = 0 を用意する
  3. \(N\) 台それぞれについて \((P_i, K_i)\) を読み込み、
    • もし \(L \le P_i \le R\) かつ \(K_i \le M\) なら ans を1増やす
  4. 最後に ans を出力する

計算量

  • 時間計算量: \(O(N)\)(各車を1回ずつ判定するだけ)
  • 空間計算量: \(O(1)\)(入力を逐次処理し、追加で大きな配列を持たない)

実装のポイント

  • 条件は L <= P <= R and K <= M のようにまとめて書くとミスが減ります(and を忘れない)。

  • \(N\) が最大 \(10^5\) なので、Pythonでは sys.stdin.buffer.read().split() を使った高速入力にしておくと安全です。

    ソースコード

import sys

def main():
    it = iter(sys.stdin.buffer.read().split())
    N = int(next(it))
    L = int(next(it))
    R = int(next(it))
    M = int(next(it))

    ans = 0
    for _ in range(N):
        P = int(next(it))
        K = int(next(it))
        if L <= P <= R and K <= M:
            ans += 1

    sys.stdout.write(str(ans))

if __name__ == "__main__":
    main()

この解説は gpt-5.2-high によって生成されました。