二分查找要读的天数t,最少读一天,最多读n天,所以在1~n里面二分
规定,要在t天里面读完这些书,那么就均分,先分每一天的第一本,即不减知识点的情况,再还有书多就分每天的第二本,(PS:若算出来知识点是负的就加0)以此类推。
def core(a,n,k):
l=0
a.sort(reverse=True)
while l<n:
mid=(l+n)//2
if find(a,mid,k):
n=mid
else:
l=mid+1
return l
def find(a,t,k):
if t==0:
return False
res=0
for i in range(len(a)):
res+=max(0,a[i]-i//t)
# print(a,res,i//t,a[i]-i//t,t)
if res>=k:
return True
n,m=map(int,input().split())
a=list(map(int,input().split()))
print(core(a,n,m))
代码原作者:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=44252526
絮絮叨:
本来想着,怎么看天,直接按照知识点加,若加到负数就开辟新的一天(判断知识点数够不够,若是够了就可以停了)--------------这样就导致了一开始纠结的,但是这样加出来的天数,是在那个天数下的最大情况,然后若是知识点不够,就又要开始新的一天,更加麻烦