L,n,m=map(int,input().split())
l1=[int(input()) for i in range(n)]
l1.append(L)
# print(l1)
def duan(L):
l,r=0,L
while(l<r):
mid=(r+l+1)//2
k=0
num = 0
flag=0
for i in range(n+1):
dis=l1[i]-k
if dis>=mid:
k=l1[i]
else:
num+=1
if num>m:
flag=1
else:
flag=0
if flag==1:
r=mid-1
elif flag==0: #这里当num==m时也不能输出mid,因为可能此时的mid不是最大的最短距离。先让l=mid,在接着向后找,如果找不到,就输出l,为最大的最短距离。
l=mid
return l
print(duan(L))
洛谷 P2678 [NOIP2015 提高组] 跳石头 python解法
于 2024-11-26 22:41:20 首次发布