腾讯算法岗冰淇淋那道题,大家能提供一下思路吗?

我只用了暴力求解,ac30😓#腾讯##笔试题目#
全部评论
两种情况讨论:一种情况假设原料最多的是5个吧,计算所有原料补齐到5需要的钱,然后如果手里的钱大于或等于补齐的钱,就用二者之差除以所有原料单价,再加上5就可以了;如果手里的钱小于需要补齐的钱,可以用二分法,在最小的原料数目和最多的原料数目之间二分。这个思路a了100%
点赞 回复 分享
发布于 2019-08-17 23:12
n, m = list(map(int, input().split())) vp = list(map(int, input().split()))      # 数量 prices = list(map(int, input().split()))  # 价格 info = [] for v, p in zip(vp, prices):     info.append([v, p]) info = sorted(info, key=lambda x:x[0]) nums = info[0][0]    # 初始份数 money = info[0][1] for i in range(1, n):     breakFlag = 1     n = info[i][0] - info[i-1][0]     if n == 0:         breakFlag = 0         money += info[i][1]         continue     elif n > 0:         if n <= m // money:             m -= money * n             nums += n             money += info[i][1]         else:             n = m // money             m -= money * n             nums += n             money += info[i][1]             break allPrices = sum(prices) if m >= allPrices:     nums += (m // allPrices) print(nums)
点赞 回复 分享
发布于 2019-08-17 22:43
我排序做的,O(nlogn),ac10...不知道是不是用STL比较慢
点赞 回复 分享
发布于 2019-08-17 22:33
我只A了10%。。
点赞 回复 分享
发布于 2019-08-17 22:35
0.4
点赞 回复 分享
发布于 2019-08-17 22:41
排序 0.6
点赞 回复 分享
发布于 2019-08-17 22:42
暴力0.5 刚开始是0.4的 后来优化了下也就提了0.1
点赞 回复 分享
发布于 2019-08-17 22:43

相关推荐

点赞 7 评论
分享
牛客网
牛客企业服务