全部评论
两种情况讨论:一种情况假设原料最多的是5个吧,计算所有原料补齐到5需要的钱,然后如果手里的钱大于或等于补齐的钱,就用二者之差除以所有原料单价,再加上5就可以了;如果手里的钱小于需要补齐的钱,可以用二分法,在最小的原料数目和最多的原料数目之间二分。这个思路a了100%
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)
暴力0.5 刚开始是0.4的 后来优化了下也就提了0.1
排序 0.6
0.4
我只A了10%。。
我排序做的,O(nlogn),ac10...不知道是不是用STL比较慢
相关推荐
06-27 19:00
陕西师范大学 Java 在百度日常实习了快5个月了,之前还在一个独角兽实习过几个月。这边mentor和leader对我都挺好,做的东西也变得核心起来。所以暑期就也没咋准备。但现在看好多兄弟三四段实习,有点犹豫要不要再换一家。
谁在守护这片沙滩:独角兽+百度够用了

点赞 评论 收藏
分享
06-13 01:23
中南民族大学 嵌入式软件开发 点赞 评论 收藏
分享

点赞 评论 收藏
分享