このシリーズではE869120さんによって作成された競プロ典型90問をPythonで解いています。
問題
ポイント
クラスを昇順ソートして、二分探索で生徒が入るべきクラスを探ります。
コード
def main():
import sys
from bisect import bisect_left
sys.setrecursionlimit(10 ** 9)
input = sys.stdin.readline
N = int(input())
classes = list(map(int, input().split()))
Q = int(input())
classes.sort()
for _ in range(Q):
b = int(input())
l = bisect_left(classes, b) # bの値に一番近いインデックスを探す
if l == len(classes): # インデックスが一番右端の場合は最後のクラスに入れる
print(abs(classes[l - 1] - b))
else: # インデックスが右端でなければ左右のクラスで比較する
print(min(abs(classes[l - 1] - b), abs(classes[l] - b)))
if __name__ == '__main__':
main()