洛谷P9240 [蓝桥杯 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 可能的最小值和最大值,中间用空格分开。

输入输出样例

输入

复制代码
3
75 3
53 2
59 2

输出

复制代码
20 25

说明/提示

【样例说明】

当 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 题。

思路:从题目中看就是求最大转化率V和最小转化率V,因为题目中说不会累加到下一次,都是独立的记录,所以我们每次先求出第i次的最大转化率和最小转化率,然后同时保存全部的最大最小值。

代码实现,仅供参考:

复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<limits.h>
#include<stdlib.h>
#include<math.h>
#include <stdbool.h>

int main()
{
	int n = 0; int max = INT_MAX; int min = INT_MIN;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		int o, x = 0; int a, b;
		scanf("%d %d", &o, &x);
		a = o / x;
		b = o / (x + 1) + 1;

		// 更新最大值 max(实际上是寻找最小的 a)
		if (a < max)
		{
			max = a;
		}
		// 更新最小值 min(实际上是寻找最大的 b)
		if (b > min)
		{
			min = b;
		}
	}

	printf("%d %d", min, max);

	return 0;
}
相关推荐
Jared_devin40 分钟前
二叉树算法题—— [蓝桥杯 2019 省 AB] 完全二叉树的权值
数据结构·c++·算法·职场和发展·蓝桥杯
和光同尘@3 小时前
66. 加一 (编程基础0到1)(Leetcode)
数据结构·人工智能·算法·leetcode·职场和发展
野犬寒鸦6 小时前
力扣hot100:环形链表(快慢指针法)(141)
java·数据结构·算法·leetcode·面试·职场和发展
Miraitowa_cheems6 小时前
LeetCode算法日记 - Day 38: 二叉树的锯齿形层序遍历、二叉树最大宽度
java·linux·运维·算法·leetcode·链表·职场和发展
秃顶老男孩.7 小时前
异步处理(前端面试)
前端·面试·职场和发展
天真小巫9 小时前
2025.9.10总结
职场和发展
武子康10 小时前
AI-调查研究-74-具身智能 机器人学习新突破:元学习与仿真到现实迁移的挑战与机遇
人工智能·程序人生·ai·职场和发展·系统架构·机器人·具身智能
墨染点香12 小时前
LeetCode 刷题【71. 简化路径】
算法·leetcode·职场和发展
小欣加油13 小时前
leetcode LCR 170.交易逆序对的总数
数据结构·c++·算法·leetcode·职场和发展·排序算法
木尼12313 小时前
leedcode 算法刷题第三十一天
算法·leetcode·职场和发展