小白月赛26-牛牛爱学习

二分查找要读的天数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

絮絮叨:
本来想着,怎么看天,直接按照知识点加,若加到负数就开辟新的一天(判断知识点数够不够,若是够了就可以停了)--------------这样就导致了一开始纠结的,但是这样加出来的天数,是在那个天数下的最大情况,然后若是知识点不够,就又要开始新的一天,更加麻烦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值