B - コストパフォーマンス最高のノートPC / Best Cost-Performance Laptop Editorial by admin
Qwen3-Coder-480B概要
\(N\) 個のノートPCから、コストパフォーマンス \(\frac{S_i}{R_i}\) が最大となるものを選び、その番号を出力する問題。
考察
この問題は、各ノートPCの性能スコア \(S_i\) を価格 \(R_i\) で割った値、つまり \(\frac{S_i}{R_i}\) を計算し、その値が最も大きくなるノートPCの番号を求めることになります。
素朴な方法としては、すべてのノートPCについてコストパフォーマンスを計算し、最大値を記録しながら比較していくことが考えられます。これは一見効率的に見えますが、制約が \(N \leq 2 \times 10^5\) と大きいため、もし誤った比較方法(たとえば全ペア比較など)をとるとTLE(時間超過)してしまう可能性があります。しかし、今回は各要素を1回ずつ見れば十分なので、線形時間で解くことができます。
さらに、同じコストパフォーマンスを持つノートPCが複数ある場合、番号が最も小さいものを選ぶ必要がある点に注意が必要です。これは単純に最初から順番に見て行って、今持っている最大値より strict に大きい場合にのみ更新すれば自然に満たされます(同じ値のときは更新しない)。
アルゴリズム
- 各ノートPCの情報を順番に読み込みながら、コストパフォーマンス \(\frac{S_i}{R_i}\) を計算する。
- 現在の最大コストパフォーマンスよりも高い値であれば、その値とインデックスを更新する。
- 最後に記録されたインデックスを出力する。
このとき、初期値として最大コストパフォーマンスを非常に小さな値(例えば \(-1\))にしておくことで、最初のノートPCが必ず選ばれるようにします。
計算量
- 時間計算量: \(O(N)\)
- 空間計算量: \(O(1)\)
各ノートPCを一度だけ走査するだけで答えが求められるため、時間計算量は \(O(N)\) です。また、保持する変数は定数個しかないため、空間計算量は \(O(1)\) となります。
実装のポイント
コストパフォーマンスを浮動小数点数型で計算すること(Pythonでは普通の
/演算子でOK)最大値の更新条件を
>とすることで、同率の場合に番号が小さい方を優先できるインデックスは0始まりだが、出力は1始まりなので、
i+1として記録する必要があるソースコード
N = int(input())
max_performance = -1
best_index = -1
for i in range(N):
R, S = map(int, input().split())
performance = S / R
if performance > max_performance:
max_performance = performance
best_index = i + 1
print(best_index)
この解説は qwen3-coder-480b によって生成されました。
posted:
last update: