[左神面试]画匠问题:[贪心]

画匠问题

http://www.nowcoder.com/questionTerminal/767778ca5b38446cba801820df11399d

def solution(arr, num):  # 工作清单和工人数目 | O(N*logS), S=sum(arr)
    assert arr and len(arr) and num
    if len(arr) <= num:  # 如果工人过多,则是取最长的一个工作返回
        return max(arr)

    def get_need_num(limit):  # 每个画师只能工作不超过limit的时间,问需要几个画师才能完成
        res, worked = 1, 0  # 已用画师数目, 当前画师已工作时间
        for v in arr:
            if v > limit:  # 这一幅画哪怕单独分配给一个画师也完成不了
                return float('inf')
            worked += v
            if worked > limit:  # 如果尝试画当前的画已超工时
                res += 1  # 新增一个画师来画这幅画
                worked = v  # 新增画师的当前工时为v
        return res

    min_sum, max_sum = 0, sum(arr)  # 二分法确定每个画师的最大工作量
    while min_sum != max_sum - 1:
        mid = (min_sum + max_sum) // 2
        if get_need_num(mid) > num:
            min_sum = mid
        else:
            max_sum = mid
    return max_sum

n, num = map(int, input().split())
arrs = list(map(int, input().split()))
print(solution(arrs, num))
全部评论

相关推荐

09-11 10:30
门头沟学院 C++
隔壁刷到的,请问几年前真的是这样吗
智能搬砖:21年已经有点难了,后面越来越难,主要是入行的卷王太多了,前几年培训机构搞宣传火了一波,像张雪峰有两年都在推计算机,进去的几百万卷王还没毕业呢,起码还要再卷五六年,到时候估计大厂就只要985了,211也得来跟我们卷外包了😂
我的秋招日记
点赞 评论 收藏
分享
09-13 17:43
已编辑
北京化工大学 硬件开发
易才一飞:感觉项目写细节一些吧,掌握技能和校内经历感觉占比太大,而且这是找嵌软还是硬件呢,似乎大家都说要有针对的写相关技术才好吧
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-11 10:08
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务