kinkon 发表于 2020-2-21 23:24:29

本帖最后由 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:03:00

本帖最后由 牧木学编程 于 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)

阴阳神万物主 发表于 2020-2-22 00:48:06

暴力破解,暂未想到更便捷的方案。
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,))

zltzlt 发表于 2020-2-22 20:41:22

fan1993423 发表于 2020-2-20 22:15
这下看还有没有问题

解答错误

输入:m = 5, woods =
输出:2
预期结果:1

zltzlt 发表于 2020-2-22 20:50:24

ruokang 发表于 2020-2-20 22:30
def f336(woods, m):
    max_hight = sum(woods) // m
    hight = max_hight


输入大数据超时

zltzlt 发表于 2020-2-22 20:53:19

546623863 发表于 2020-2-20 22:40
目前么得其他思路,只有这个比较蠢的

输入大数据超时

zltzlt 发表于 2020-2-22 20:54:58

拉了盏灯 发表于 2020-2-20 22:54
如果把木头劈成10/3还能高点,

输入大数据超时

zltzlt 发表于 2020-2-22 20:55:17

塔利班 发表于 2020-2-20 23:00
暂时没想到别的

会超时

zltzlt 发表于 2020-2-22 20:56:00

ouyunfu 发表于 2020-2-21 00:28


会超时

fan1993423 发表于 2020-2-22 21:16:16

zltzlt 发表于 2020-2-22 20:41
解答错误

输入:m = 5, woods =


你题目说的是不同长度的木头哈

546623863 发表于 2020-2-22 21:32:55

本帖最后由 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
缩小了一下范围,应该会快一点吧

kinkon 发表于 2020-2-22 22:27:22

zltzlt 发表于 2020-2-22 20:41
解答错误

输入:m = 5, woods =


请问是m大还是woods大?

kinkon 发表于 2020-2-22 22:51:04

酱紫可能不会超时了吧
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-23 08:59:15

牧木学编程 发表于 2020-2-22 00:03


有没有人试试我的代码{:5_96:}

776667 发表于 2020-2-23 12:07:04

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

zltzlt 发表于 2020-2-23 19:45:30

fan1993423 发表于 2020-2-22 21:16
你题目说的是不同长度的木头哈

我意思是不是全部都相同

fan1993423 发表于 2020-2-23 22:55:42

zltzlt 发表于 2020-2-23 19:45
我意思是不是全部都相同

那你这个意思就表述不清了,不同的话我就认为是不同的长度,这个应该叫不完全相同

TJBEST 发表于 2020-2-25 10:11:41

题主怎么不给试了?我答案当天给的,就测到我那里,{:5_94:}

zltzlt 发表于 2020-2-25 15:15:11

TJBEST 发表于 2020-2-25 10:11
题主怎么不给试了?我答案当天给的,就测到我那里,

拖了好几天了{:10_245:}今天测完

zltzlt 发表于 2020-2-25 15:17:14

TJBEST 发表于 2020-2-21 14:49
看了三遍才看懂题 ,不过难度不大

会超时{:10_277:}
页: 1 [2] 3
查看完整版本: Python:每日一题 336