问题
思路
这个题给的提示就是第二题上来一定要先写暴力,不要直接上其他想法,要不然思路容易跑偏。。。哎就差一点点就拿满了……
这里写完暴力之后得70分,那就是后面优化的问题,里面读数据不能优化,那就优化后面的搜索
这里的搜索实质上是在搜索一个合适的天数,可以注意到这个天数有一个很明显的分界的状态,左侧和右侧区分很明显,这样就可以用二分查找来优化
代码
70
一定先写暴力解法
n,m,k = map(int,input().split())
# 区域总数 资源数量 最少天数
need_days = [0]*n
need_source = [0]*n
max_day,min_day = 0,k
for i in range(n):
t,c = map(int,input().split())
need_days[i],need_source[i] = t,c
max_day = max(max_day,t)
min_day = min(min_day,t)
for day in range(min_day,max_day+1):
source = m
for i in range(n):
if need_days[i]>day:
source-=need_source[i]*(need_days[i]-day)
if source>=0:
print(day)
break
100分代码
在遍历里面卡值->用二分
n,m,k = map(int,input().split())
# 区域总数 资源数量 最少天数
need_days = [0]*n
need_source = [0]*n
max_day,min_day = 0,k
for i in range(n):
t,c = map(int,input().split())
need_days[i],need_source[i] = t,c
max_day = max(max_day,t)
min_day = min(min_day,t)
l,r = min_day,max_day+1
# for day in range(min_day,max_day+1):
while l<r:
day = (l+r)//2
source = m
for i in range(n):
if need_days[i]>day:
source-=need_source[i]*(need_days[i]-day)
if source>=0:
r = day
else:
l=day+1
print(l)