解题思路:
注意事项:
参考代码:
def sort1(m):
a,b=m
return b,a
def sort2(m):
a,b=m
return a,-b
def check(mid):
list2=[] # 用来区间合并
for i in list1:
th,t=i
if t<=mid:
left,right=th-(mid-t),th+(mid-t)
if left<1:
left=1
list2.append([left,right])
else:
break
list2=sorted(list2,key=sort2)
# 区间合并
l,r=list2[0]
if l!=1:
return 0
for i in list2[1:]:
a,b=i
if b<=r: # 包含
continue
else:
if a-r>1:
return 0
else:
# 修改
r=b
if r>=lens:
return 1
return 0
n,lens=map(int,input().split())
list1=[]
for i in range(n):
list1.append(list(map(int,input().split())))
list1=sorted(list1,key=sort1)
# 二分时间
left=list1[0][1] # 总得有个时间
right=10**14
result=[]
while left<=right:
mid=(left+right)>>1
if check(mid):
right=mid-1
result.append(mid)
else:
left=mid+1
print(result[-1])
0.0分
3 人评分
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:719 |
点我有惊喜!你懂得!浏览:1462 |
2006年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:912 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:773 |
十->二进制转换 (C语言代码)浏览:1330 |
printf基础练习2 (C语言代码)浏览:826 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:782 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:616 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:642 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:609 |