关注
t2贴一个O(logn)解法:
显然,最大值为(a + b) // (x + y),下面对0到(a + b) // (x + y)二分check最大值max是否可以由max得到答案。
首先特判x=y的情况,max为min(a, b) // x。
设二分过程中的值为m,则可以由m得到答案(*)等价于存在m1使得m1*x+(m-m1)*y<=a 且 m1*y+(m-m1)*x<=b,分x>y和x<y讨论,解上面两个不等式得到m1的上界right和下界left,对right向下取整,对left向上取整,则(*)等价于left<=right 且left<=m且right>=0。
import math
a, b, x, y = map(int,input().split(' '))
if x == y:
print(min(a, b) // x)
else:
l, r = 0, (a + b) // (x + y)
while l <= r:
mid = (l + r ) // 2
if x > y:
left, right = (b - mid * x)/(y - x), (a - mid * y)/(x - y)
else:
right, left = (b - mid * x)/(y - x), (a - mid * y)/(x - y)
right, left = math.floor(right), math.ceil(left)
if left <= right and mid >= left and 0 <= right:
l = mid + 1
else:
r = mid - 1
print(r)
查看原帖
1 9
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 烂工作和没工作哪个更痛苦? #
2343次浏览 61人参与
# 牛油的搬砖plog #
189361次浏览 1272人参与
# 厦门银行科技岗值不值得投 #
16629次浏览 404人参与
# 给工作过的公司写一条大众点评,你会怎么写? #
1294次浏览 24人参与
# 发工资后,你做的第一件事是什么 #
100376次浏览 336人参与
# AI替代不了什么? #
2266次浏览 46人参与
# 学历VS实习,哪个更重要? #
11189次浏览 170人参与
# 一人分享一道面试手撕题 #
114457次浏览 2895人参与
# 春招至今,你收到几个面试了? #
4903次浏览 56人参与
# 谈薪时HR压价该怎么应对 #
294131次浏览 3362人参与
# 工作上你捅过哪些篓子? #
69290次浏览 335人参与
# 产品人求职现状 #
361519次浏览 2603人参与
# OPPO笔试 #
23183次浏览 102人参与
# 机械校招之路总结 #
120297次浏览 2083人参与
# 面试紧张时你会有什么表现? #
35831次浏览 245人参与
# uu们,春招你还来吗? #
70098次浏览 940人参与
# 刚工作的你,踩过哪些坑? #
33419次浏览 278人参与
# 面试中,你被问过哪些奇葩问题? #
99621次浏览 1441人参与
# 非技术投递记录 #
716916次浏览 6930人参与
# 机械人与华为的爱恨情仇 #
155284次浏览 1047人参与
# 华为工作体验 #
314323次浏览 1398人参与
