公式

A - 商品の品質評価 / Product Quality Evaluation 解説 by admin

GPT 5.2 High

概要

各商品についてリスクスコア \(A_i \times B_i\) を計算し、それが \(K\) 以上となる商品の個数を数える問題です。

考察

求めたいのは「条件を満たす商品の数」だけなので、各商品を独立に判定して足し上げれば十分です。
つまり、商品 \(i\) ごとに \(A_i \times B_i \ge K\) をチェックし、真ならカウントを \(+1\) します。

ここでありがちなミスとして、割合(パーセント)だからといって \(A_i/100\) のように実数計算をしてしまう必要はありません。問題の定義が「リスクスコアは \(A_i \times B_i\)」と明示されているため、そのまま整数の積で比較してOKです(浮動小数点誤差も避けられます)。

また、\(N \le 2 \times 10^5\) なので、全商品を1回ずつ見る \(O(N)\) の方法なら十分間に合います。逆に、並べ替え(ソート)などを行うと \(O(N \log N)\) になり、今回は不要な処理になります(間に合うことも多いですが、無駄です)。

具体例: - \(K=1000\)、商品が \((A,B)=(10,150)\) なら \(10 \times 150=1500 \ge 1000\) なので数える
- \((A,B)=(5,100)\) なら \(5 \times 100=500 < 1000\) なので数えない

アルゴリズム

  1. 入力で \(N, K\) を受け取る
  2. 答え用の変数 ans=0 を用意
  3. \(N\) 回繰り返し、各商品について \((A, B)\) を読む
  4. もし \(A \times B \ge K\) なら ans += 1
  5. 最後に ans を出力する

計算量

  • 時間計算量: \(O(N)\)(各商品を1回ずつ判定するだけ)
  • 空間計算量: \(O(1)\)(入力を溜めずに逐次処理)

実装のポイント

  • \(K \le 10^{18}\) なので積 \(A \times B\) も大きくなり得ますが、Pythonの整数は任意精度なのでオーバーフローの心配はありません(他言語なら 64-bit 整数型を使うのが重要)。

  • 入力が最大 \(2 \times 10^5\) 行あるため、sys.stdin.readline を使うと高速に読み込めます。

    ソースコード

import sys

def main():
    input = sys.stdin.readline
    N, K = map(int, input().split())
    ans = 0
    for _ in range(N):
        A, B = map(int, input().split())
        if A * B >= K:
            ans += 1
    print(ans)

if __name__ == "__main__":
    main()

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

投稿日時:
最終更新: