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\) なので数えない
アルゴリズム
- 入力で \(N, K\) を受け取る
- 答え用の変数
ans=0を用意 - \(N\) 回繰り返し、各商品について \((A, B)\) を読む
- もし \(A \times B \ge K\) なら
ans += 1 - 最後に
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 によって生成されました。
投稿日時:
最終更新: