Pythonで理解する蟻本「3-1 Aggressive cows(POJ No.2456)」(p.131)
この記事は「プログラミングコンテストチャレンジブック第2版」(蟻本)の
「3-1 Aggressive cows(POJ No.2456)」(p.131)
のコードをPythonで書き直したものとなっています。
入力
入力例
5 3
1 2 8 4 9
解答
INF = 10 ** 9 + 1
# 入力
N, M = map(int,input().split())
x = list(map(int,input().split()))
# 条件を満たすか判定
def C(d):
last = 0
for i in range(1, M):
crt = last + 1
while crt < N and x[crt] - x[last] < d:
crt += 1
if crt == N:
return False
last = crt
return True
# はじめにxをソートしておく
x.sort()
# 解の存在範囲を初期化
lb = 0
ub = INF
while ub - lb > 1:
mid = (lb + ub) // 2
if C(mid):
lb = mid
else:
ub = mid
print(lb)