公式
A - テストの点数比較 / Comparing Test Scores 解説 by admin
Qwen3-Coder-480B概要
この問題では、複数の生徒のテストの点数が与えられ、指定された2人の生徒の点数を比較して、一方が他方よりも厳密に高いかどうかを判定するものです。
考察
この問題はシンプルな比較を行うだけですが、いくつかの重要なポイントがあります。
- 生徒の点数は最初にすべて与えられるので、毎回の質問で点数を参照するだけです。つまり、前処理なしでも十分高速に処理できます。
- 出席番号は1始まりですが、Pythonなどの配列のインデックスは0始まりなので、アクセス時に1を引く必要があります。
- 「厳密に高い」というのは、等しい場合も含まないことに注意が必要です。例えば点数が同じ場合は
Noと出力します。 - 最大で \(10^5\) 個の質問があるため、各質問を定数時間で処理できることが重要です。
この問題は、点数の比較そのものが単純であり、事前に必要な計算もなく、毎回の質問に対して即座に答えられるので、特別なアルゴリズムやデータ構造は必要ありません。
アルゴリズム
- 最初に、生徒の人数 \(N\) と質問数 \(Q\) を読み込む。
- 各生徒の点数 \(S_1, S_2, ..., S_N\) をリストなどで記録しておく。
- 各質問について、出席番号 \(a_i\) と \(b_i\) が与えられるので、該当する点数 \(S_{a_i}\) と \(S_{b_i}\) を比較する。
- \(S_{a_i} > S_{b_i}\) であれば
Yes、そうでなければNoを出力する。
計算量
- 時間計算量: \(O(N + Q)\)
(点数の読み込みに \(O(N)\)、質問への回答に \(O(Q)\)) - 空間計算量: \(O(N)\)
(点数を保持するためにサイズ \(N\) のリストを使用)
実装のポイント
出席番号は1始まりなので、リストのインデックスにアクセスする際は
-1する必要があります。不等号が「厳密に大きい」ことを意味する
>であることに注意しましょう。入出力の形式に気を付けて、正確にパースする必要があります。
ソースコード
# 入力の読み込み
N, Q = map(int, input().split())
H = list(map(int, input().split()))
# 各質問に対する処理
for _ in range(Q):
a, b = map(int, input().split())
# 出席番号は1始まりなので、リストのインデックスは-1する
if H[a - 1] > H[b - 1]:
print("Yes")
else:
print("No")
この解説は qwen3-coder-480b によって生成されました。
投稿日時:
最終更新: