公式

A - テストの点数比較 / Comparing Test Scores 解説 by admin

Qwen3-Coder-480B

概要

この問題では、複数の生徒のテストの点数が与えられ、指定された2人の生徒の点数を比較して、一方が他方よりも厳密に高いかどうかを判定するものです。

考察

この問題はシンプルな比較を行うだけですが、いくつかの重要なポイントがあります。

  • 生徒の点数は最初にすべて与えられるので、毎回の質問で点数を参照するだけです。つまり、前処理なしでも十分高速に処理できます。
  • 出席番号は1始まりですが、Pythonなどの配列のインデックスは0始まりなので、アクセス時に1を引く必要があります。
  • 「厳密に高い」というのは、等しい場合も含まないことに注意が必要です。例えば点数が同じ場合は No と出力します。
  • 最大で \(10^5\) 個の質問があるため、各質問を定数時間で処理できることが重要です。

この問題は、点数の比較そのものが単純であり、事前に必要な計算もなく、毎回の質問に対して即座に答えられるので、特別なアルゴリズムやデータ構造は必要ありません。

アルゴリズム

  1. 最初に、生徒の人数 \(N\) と質問数 \(Q\) を読み込む。
  2. 各生徒の点数 \(S_1, S_2, ..., S_N\) をリストなどで記録しておく。
  3. 各質問について、出席番号 \(a_i\)\(b_i\) が与えられるので、該当する点数 \(S_{a_i}\)\(S_{b_i}\) を比較する。
  4. \(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 によって生成されました。

投稿日時:
最終更新: