求求各位救救苦逼py人
查看原帖
求求各位救救苦逼py人
1216518
ErgouTree楼主2024/3/22 17:27

能拿一半,为什么还有wr和tle,感觉没什么问题的

import sys
input = sys.stdin.readline

n, k = map(int,input().split())
wood = []
for _ in range(n):
    wood.append(int(input()))

# 首先这道题是二分
# 也就是说,最短的那根木头一定长于等于切出来的最小段,但是怕跑掉数据,先看1000001最大的,万一超时再说
# 那我们就从0到最短的那根木头分别取l,r
# 判定一旦r小于1,那就直接输出0

def check(mid):
    global k,wood
    pac = 0
    for w in wood:
        while w >= mid:
            w -= mid
            pac += 1
    # 正好切出最长的最小段,合题意1
    if pac == k:
        return 1
    # 切出最长的最小段比要求的少,也就是说切的长了
    elif pac < k:
        return 2
    # 切出最长的最小段比要求的多,也就是说切的短了
    elif pac > k:
        return 3

left, right = 0, max(wood)
mid = 0
result = 0

while left <= right:
    mid = (left + right) // 2

    if right < 1:
        result = 0
        break

    check_result = check(mid)

    if check_result == 1:
        result = mid
        left = mid + 1
    elif check_result == 2:
        right = mid - 1
    else:
        left = mid + 1

print(result)
2024/3/22 17:27
加载中...