洛谷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;
}
相关推荐
天才测试猿6 小时前
Selenium常用函数总结
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
_GR7 小时前
2022年蓝桥杯第十三届C&C++大学B组真题及代码
c语言·数据结构·c++·算法·蓝桥杯·动态规划
BingLin-Liu7 小时前
蓝桥杯备考----》完全背包模板
职场和发展·蓝桥杯
咚咚轩8 小时前
蓝桥杯省模赛 台阶方案
蓝桥杯·动态规划
hnsqls8 小时前
LeetCode 精简75 题
算法·leetcode·职场和发展
不吃元西8 小时前
leetcode 118. 杨辉三角
算法·leetcode·职场和发展
脑子慢且灵8 小时前
【蓝桥杯】 枚举和模拟练习题
java·开发语言·职场和发展·蓝桥杯·模拟·枚举
wen__xvn8 小时前
每日一题洛谷P8716 [蓝桥杯 2020 省 AB2] 回文日期c++
c++·算法·蓝桥杯
梭七y9 小时前
【力扣hot100题】(027)两数相加
算法·leetcode·职场和发展
rigidwill6669 小时前
LeetCode hot 100—二叉搜索树中第K小的元素
数据结构·c++·算法·leetcode·职场和发展