蓝桥杯day4

题目:

题目描述

小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V,V 是一个正整数,这意味着消耗 V 个普通金属 O 恰好可以冶炼出一个特殊金属 X,当普通金属 O 的数目不足 V 时,无法继续冶炼。

现在给出了 N 条冶炼记录,每条记录中包含两个整数 A 和 B,这表示本次投入了 A 个普通金属 O,最终冶炼出了 B 个特殊金属 X。每条记录都是独立的,这意味着上一次没消耗完的普通金属 O 不会累加到下一次的冶炼当中。

根据这 N 条冶炼记录,请你推测出转换率 V 的最小值和最大值分别可能是多少,题目保证评测数据不存在无解的情况。

输入格式

第一行一个整数 N,表示冶炼记录的数目。

接下来输入 N 行,每行两个整数 A,B,含义如题目所述。

输出格式

输出两个整数,分别表示 V 可能的最小值和最大值,中间用空格分开。

思路:我在碰到这题的时候,首先想到的是用数学方法解决。如题,A代表A个普通金属,B代表B个特殊金属。因为题目要求如果A<V就无法转换成特殊金属,我们只需要求上界和下界。上界(L_min)     L_min=min(L_min,A//B),这里做一个解释为什么我们求的上界的最小值,当我们直接用A//B后,我们会得到三个不同的数(可能相同,但那就没必要讨论了),如果我们取较大的数,那么就不能满足,A/V=B这个条件了,下面取下界也同理(L_max=max(L_max,A//(B+1)+1))

代码:

n = int(input())
#这里L_max代表取的下界,而L_min取的是上界
L_max = 0
L_min = 1e9+1
for i in range(n):
    # A代表普通金属的数目,B指特殊金属的数量
    A,B = map(int,input().split())
    L_max = max(L_max, A // (B + 1) + 1)
    L_min = min(L_min, A // B)
print(L_max,L_min)

反省与思考:这里只是一种简单的数学思想,有心的同学可以思考一下是否能够用二分法解决。

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值