公式
A - 合格基準 / Passing Criteria 解説 by admin
GPT 5.2 High概要
基準点 \(S\) からの差が \(T\) 以内(\(|A_i-S|\le T\))である生徒を「合格」として数え、その人数を求める問題です。
考察
各生徒について「合格かどうか」は \(A_i\) だけで独立に判定できます。
したがって、全員の点数を1回ずつ見て、条件 \(|A_i-S|\le T\) を満たす人数を数えれば十分です。
例えば \(S=50, T=5\) のとき、
- \(A_i=47\) は \(|47-50|=3 \le 5\) なので合格
- \(A_i=60\) は \(|60-50|=10 > 5\) なので不合格
というように、絶対値の条件をそのまま判定すればよいです。
制約は \(N \le 2\times 10^5\) なので、\(O(N)\) の1回走査なら十分間に合います(逆に、全組み合わせなど無駄に重い処理をすると間に合いません)。
アルゴリズム
- 入力として \(N,S,T\) と配列 \(A\) を受け取る。
- カウンタ
ans=0を用意する。 - 各点数 \(A_i\) について、もし \(|A_i-S|\le T\) なら
ansを1増やす。 - 最後に
ansを出力する。
コードでは sum(1 for x in A if abs(x - S) <= T) として、条件を満たす要素数をまとめて数えています。
計算量
- 時間計算量: \(O(N)\)(全員を1回ずつ判定)
- 空間計算量: \(O(N)\)(点数列 \(A\) を保持するため。読みながら数える実装にすれば \(O(1)\) にも可能)
実装のポイント
判定条件は必ず絶対値を使って \(|A_i-S|\le T\) をそのまま書く(
abs(A_i - S) <= T)。入力が最大 \(2\times 10^5\) 要素あるため、Pythonでは
sys.stdin.buffer.read()でまとめて読み込むと安定して高速です。ソースコード
import sys
def main():
data = list(map(int, sys.stdin.buffer.read().split()))
N, S, T = data[0], data[1], data[2]
A = data[3:3+N]
ans = sum(1 for x in A if abs(x - S) <= T)
print(ans)
if __name__ == "__main__":
main()
この解説は gpt-5.2-high によって生成されました。
投稿日時:
最終更新: