题解 | 2024_帕鲁任务分配_1523二分查找

2024_帕鲁任务分配_1523

https://www.nowcoder.com/practice/831dc3c28a93465a8d748a3f271b2679

def check(x):
    temp = sum = x
    if k > 0:
        for i in range(k - 1, -1, -1):
            temp = max(1, temp - min(c[i], c[i + 1]))
            sum += temp
            if sum > m:
                return False
    temp = x
    if k < n - 1:
        for i in range(k + 1, n):
            temp = max(1, temp - min(c[i - 1], c[i]))
            sum += temp
            if sum > m:
                return False
    return True


n, m, k = map(int, input().split())
if m < n:
    print(-1)
    exit()
c = list(map(int, input().split()))
left, right = 1, m - (n - 1)
k -= 1
while left <= right:
    mid = (left + right) // 2
    if check(mid):
        left = mid + 1
    else:
        right = mid - 1
print(right)

全部评论

相关推荐

03-10 10:57
已编辑
门头沟学院 推荐算法
夜夜还好:我们学校说为了学生就业,更新了课程,我今天大二,上学期在学jsp,html,这学期上来工程实践,要求用springboot+vue,说什么这些技术要我们提前自己准备,要不你把学费还我吧,我给b站充个会员,人家教的比你多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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