公式
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)\) は走行距離が超過なのでカウントしない
- \((P,K)=(250, 40000)\) は両方満たすのでカウントする
\(N \le 10^5\) なので、全ての車を1回ずつ確認する素朴な方法(全探索)で十分間に合います。
逆に、ここでソートや複雑なデータ構造を使う必要はありません(実装が重くなるだけで、計算量的にも得をしません)。
アルゴリズム
- 入力で \(N, L, R, M\) を受け取る
- 答え用の変数
ans = 0を用意する - \(N\) 台それぞれについて \((P_i, K_i)\) を読み込み、
- もし \(L \le P_i \le R\) かつ \(K_i \le M\) なら
ansを1増やす
- もし \(L \le P_i \le R\) かつ \(K_i \le M\) なら
- 最後に
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 によって生成されました。