P9240 [蓝桥杯 2023 省 B] 冶炼金属
链接: P9240 [蓝桥杯 2023 省 B 组 C题] 冶炼金属
本题考点: 数学!
[蓝桥杯 2023 省 B] 冶炼金属
小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V,V 是一个正整数,这意味着消耗 V 个普通金属 O 恰好可以冶炼出一个特殊金属 X,当普通金属 O 的数目不足 V 时,无法继续冶炼。
现在给出了 N 条冶炼记录,每条记录中包含两个整数 A 和 B,这表示本次投入了 A 个普通金属 O,最终冶炼出了 B 个特殊金属 X。每条记录都是独立的,这意味着上一次没消耗完的普通金属 O 不会累加到下一次的冶炼当中。
根据这 N 条冶炼记录,请你推测出转换率 V 的最小值和最大值分别可能是多少,题目保证评测数据不存在无解的情况。
第一行一个整数 N,表示冶炼记录的数目。
接下来输入 N 行,每行两个整数 A,B,含义如题目所述。
输出两个整数,分别表示 V 可能的最小值和最大值,中间用空格分开。
【样例说明】
当 V=20 时,有: ⌊2075⌋=3,⌊2053⌋=2,⌊2059⌋=2,可以看到符合所有冶炼记录。
当 V=25 时,有: ⌊2575⌋=3,⌊2553⌋=2,⌊2559⌋=2,可以看到符合所有冶炼记录。
且再也找不到比 20 更小或者比 25 更大的符合条件的 V 值了。
【评测用例规模与约定】
对于 30% 的评测用例, 1≤N≤102。
对于 60% 的评测用例, 1≤N≤103。
对于 100% 的评测用例, 1≤N≤104,1≤B≤A≤109。
蓝桥杯 2023 省赛 B 组 C 题。
题解
##container## |
---|
 |
分析得出直觉告诉我, 就是这样计算 |
因为 b≤⌊Va⌋<b+1 所以 b≤⌊Va⌋⇒V≤⌊ba⌋ 所以⌊Va⌋<b+1⇒⌊b+1a⌋+1<V
这个推论是正确的。
首先,根据给定的不等式 b≤⌊Va⌋<b+1,我们有 ⌊Va⌋<b+1。
因此,我们可以将 b+1 替换为 ⌊Va⌋+1,得到:
⌊Va⌋<⌊Va⌋+1
然后,根据 ⌊b+1a⌋<V,我们可以将 V 替换为 ⌊b+1a⌋,得到:
⌊Va⌋<⌊b+1a⌋+1
这样就得到了你提出的推论:
⌊Va⌋<b+1⇒⌊b+1a⌋+1<V
希望这样能够解决你的疑问,如果还有其他问题,请随时提出。By GPT-3.5
感觉不是很对?!!
这个推导的关键在于理解下取整函数和上下界的概念。
首先,我们有不等式 ⌊Va⌋<b+1。这个不等式的含义是 Va 向下取整小于 b+1。也就是说, Va 的最大整数部分小于 b+1。
如果我们将这个不等式两边同时乘以 V,我们可以得到 a<V(b+1)。然后,我们可以将这个不等式两边同时除以 b+1,得到 b+1a<V。这个不等式的含义是 V 大于 b+1a。
但是,因为 Va 的下界小于 b+1,所以 V 必须大于 b+1a 的上界加一,即 ⌊b+1a⌋+1<V。
这个推导可能有点复杂,但是只要理解了下取整函数和上下界的概念,就能理解这个推导的过程。希望这个解释对你有所帮助!如果你还有其他问题,欢迎随时提问。😊By 具有 GPT4.0 的 Copilot
AC代码
#include <cstdio>
using namespace std;
int main() {
int n;
scanf("%d", &n);
int v_max = 1e9;
int v_min = 0;
for (int i = 0, a, b; i < n; ++i) {
scanf("%d %d", &a, &b);
v_max = min(v_max, a / b);
v_min = max(v_min, a / (b + 1) + 1);
}
printf("%d %d\n", v_min, v_max);
return 0;
}