本帖最后由 kinkon 于 2020-2-21 23:31 编辑
想了好久才理清思路,感觉有些难度
def f336(m,woods):
woods = sorted(woods)
if len(woods) <= 1:
return woods//m
else:
woods = woods[-m:]
n, c = woods[-1]//m, 0
while True:
n += 1
for wood in woods:
c += wood//n
if c < m:
return n - 1
c = 0
本帖最后由 牧木学编程 于 2020-2-22 00:13 编辑
import math
def judge(height,m,woods):
#判断高度是否符合要求
sum = 0
for each in woods:
sum += math.floor(each / height) #不用//的原因是因为有bug例如5 //(5/3)=2.0
if sum >= m:
return True
else:
False
def func(m,woods):
woods.sort()
#先找最大的整数
i = woods[-1] // m
while True:
if judge(i,m,woods):
i += 1
continue
else:
i -= 1
break
#答案在i和i+1之间,最长的那根木头分割的木头最多
max = woods[-1]//i
while True:
temp = woods[-1] / max
if judge(temp,m,woods) and temp > i:
return temp
else:
max += 1
if max > m:
return i
a = func(3,)
print(a)
暴力破解,暂未想到更便捷的方案。
def solve(m:'int > 0',woods:'list of int')->int:
if m <= 0:return 'inf'
woods.sort(reverse=True)
for h in range(woods,0,-1):
n = 0
for each in woods:
n += each // h
if n >= m:return h
return 0
if __name__ == '__main__':
print('示例1 输出:',solve(3,))
print('示例2 输出:',solve(3,))
fan1993423 发表于 2020-2-20 22:15
这下看还有没有问题
解答错误
输入:m = 5, woods =
输出:2
预期结果:1
ruokang 发表于 2020-2-20 22:30
def f336(woods, m):
max_hight = sum(woods) // m
hight = max_hight
输入大数据超时
546623863 发表于 2020-2-20 22:40
目前么得其他思路,只有这个比较蠢的
输入大数据超时
拉了盏灯 发表于 2020-2-20 22:54
如果把木头劈成10/3还能高点,
输入大数据超时
塔利班 发表于 2020-2-20 23:00
暂时没想到别的
会超时
ouyunfu 发表于 2020-2-21 00:28
会超时
zltzlt 发表于 2020-2-22 20:41
解答错误
输入:m = 5, woods =
你题目说的是不同长度的木头哈
本帖最后由 546623863 于 2020-2-22 21:37 编辑
zltzlt 发表于 2020-2-22 20:53
输入大数据超时
def fun336(m : int, woods : list):
woods.sort(reverse = True)
begin = woods//3
if(begin < 1):
begin = 1
Max = begin
for i in range(begin,woods+1):
num = 0
for each in woods:
if(each >= i):
num += (each // i)
if(num >= m):
Max = i
break
else:
return Max
return Max
缩小了一下范围,应该会快一点吧
zltzlt 发表于 2020-2-22 20:41
解答错误
输入:m = 5, woods =
请问是m大还是woods大?
酱紫可能不会超时了吧
def p336(m,woods):
woods = sorted(woods)
if len(woods) <= 1:
return woods//m
else:
woods = woods[-m:]
n = woods[-1]//m
nwoods =
num = sum(nwoods)//m
c = 0
while True:
for wood in nwoods:
c += wood//num
if c >= m:
return num
num -= 1
c = 0
牧木学编程 发表于 2020-2-22 00:03
有没有人试试我的代码{:5_96:}
def fun336(m,woods):
woods = sorted(woods)[::-1]
for i in range(max(woods)+1)[::-1]:
count = 0
for j in woods:
count += j//i
if count >= m:
return i
if j < i:
break
fan1993423 发表于 2020-2-22 21:16
你题目说的是不同长度的木头哈
我意思是不是全部都相同
zltzlt 发表于 2020-2-23 19:45
我意思是不是全部都相同
那你这个意思就表述不清了,不同的话我就认为是不同的长度,这个应该叫不完全相同
题主怎么不给试了?我答案当天给的,就测到我那里,{:5_94:}
TJBEST 发表于 2020-2-25 10:11
题主怎么不给试了?我答案当天给的,就测到我那里,
拖了好几天了{:10_245:}今天测完
TJBEST 发表于 2020-2-21 14:49
看了三遍才看懂题 ,不过难度不大
会超时{:10_277:}