小招喵喜欢吃喵粮。这里有 N 堆喵粮,第 i 堆中有 p[i] 粒喵粮。喵主人离开了,将在 H 小时后回来。
小招喵可以决定她吃喵粮的速度 K (单位:粒/小时)。每个小时,她将会选择一堆喵粮,从中吃掉 K 粒。如果这堆喵粮少于 K 粒,她将吃掉这堆的所有喵粮,然后这一小时内不会再吃更多的喵粮。
小招喵喜欢慢慢吃,但仍然想在喵主人回来前吃掉所有的喵粮。
返回她可以在 H 小时内吃掉所有喵粮的最小速度 K(K 为整数)。
小招喵喜欢吃喵粮。这里有 N 堆喵粮,第 i 堆中有 p[i] 粒喵粮。喵主人离开了,将在 H 小时后回来。
小招喵可以决定她吃喵粮的速度 K (单位:粒/小时)。每个小时,她将会选择一堆喵粮,从中吃掉 K 粒。如果这堆喵粮少于 K 粒,她将吃掉这堆的所有喵粮,然后这一小时内不会再吃更多的喵粮。
小招喵喜欢慢慢吃,但仍然想在喵主人回来前吃掉所有的喵粮。
返回她可以在 H 小时内吃掉所有喵粮的最小速度 K(K 为整数)。
第一行输入为喵粮数组,以空格分隔的N个整数
第二行输入为H小时数
最小速度K
3 6 7 11 8
4
def solution(p, h): i = 1 # 进食速度k while 1: count = 0 i += 1 for j in range(len(p)): if p[j] % i != 0: count = count + p[j]//i+1 else: count = count + p[j]//i if count <= h: return i if __name__ =='__main__': p = list(map(int, input().strip().split())) h = int(input().strip()) print(solution(p, h))# 方法二:利用二分查找优化
def solution2(p, k): count = 0 for j in range(len(p)): if p[j] % k != 0: count = count + p[j] // k + 1 else: count = count + p[j] // k return count if __name__ =='__main__': p = list(map(int, input().strip().split())) h = int(input().strip()) l, r = sum(p)//h, max(p) while l < r: mid = l + (r - l) // 2 count = solution2(p, mid) if count > h: l = mid+1 else: r = mid print(l)
from math import ceil
nums = list(map(int, input().split()))
H = int(input())
def eatAll(K:int) -> bool:
return sum(ceil(n / K) for n in nums) <= H
l, r = 1, 10000000
while l <= r:
mid = int((l+r)/2)
if eatAll(mid) and (not eatAll(mid - 1)):
print(mid)
break
elif eatAll(mid):
r = mid - 1
elif not eatAll(mid):
l = mid + 1 二分查找
import sys p=list(map(int,sys.stdin.readline().split())) h=int(sys.stdin.readline().strip()) for i in range(1,max(p)+1): hour=0 for j in p: if j<i: hour+=1 elif j%i==0: hour+=j//i else: hour=hour+j//i+1 if hour<=h: print(i) break
import math p = list(map(int, input().strip().split())) h = int(input().strip()) lb = math.ceil(sum(p) / h) # 最小速度的下界 while True: if sum(math.ceil(i/lb) for i in p) <= h: # 满足则直接输出 print(lb) break else: # 否则提高速度 lb += 1
arr = [int(elem) for elem in input().split()] H = int(input()) speed = 1 while True: Now = 0; Next = 0 for number in arr: if number<=speed: Now+=1 elif number%speed==0: Now+=number//speed else: Now+=number//speed+1 if number<=(speed+1): Next+=1 elif number%(speed+1)==0: Next+=number//(speed+1) else: Next+=number//(speed+1)+1 if Now>H and Next<=H: print(speed+1) break else: speed+=1
"""
暴力尝试,K从1到最大值
"""
import sys
import math
if __name__ == "__main__":
# sys.stdin = open("input.txt", "r")
p = list(map(int, input().strip().split()))
H = int(input().strip())
for K in range(1, max(p) + 1):
temp = 0
for a in p:
temp += math.ceil(a / K)
if temp <= H:
break
print(K)