JOI 本選 B ピザ

問題はこちら

まず店舗の位置をソートする。各配達先に対して、時計回りに回った時の最小、反時計回りに回った時の最小を二分探索でそれぞれ求めて小さい方を答えに足していく。

from bisect import bisect_left, bisect_right

d, n, m = [int(input()) for _ in range(3)]
D = sorted([0] + [int(input()) for _ in range(n - 1)])

ans = 0
for _ in range(m):
   k = int(input())
   i = bisect_left(D, k)
   if i == n:
       uk = d
   else:
       uk = D[i]
   j = bisect_right(D, k) - 1
   if j == -1:
       lk = D[n - 1]
   else:
       lk = D[j]
   ans += min(uk - k, k - lk)
   
print(ans)


この記事が気に入ったらサポートをしてみませんか?