洛谷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;
}
相关推荐
Kuo-Teng3 小时前
LeetCode 118: Pascal‘s Triangle
java·算法·leetcode·职场和发展·动态规划
野蛮人6号4 小时前
力扣热题100道之207课程表
算法·leetcode·职场和发展
Kuo-Teng6 小时前
LeetCode 139: Word Break
java·算法·leetcode·职场和发展·word·动态规划
饮品爱好者7 小时前
[C#] NO.4 我的第一个项目
vscode·职场和发展·c#·github
小欣加油9 小时前
leetcode 1513 仅含1的子串数
c++·算法·leetcode·职场和发展
学历真的很重要9 小时前
PyTorch 零基础入门:从张量到 GPU 加速完全指南
人工智能·pytorch·后端·深度学习·语言模型·职场和发展
John_ToDebug1 天前
重建内在秩序:从神经科学理解情绪的逻辑
程序人生·职场和发展
Swift社区1 天前
LeetCode 425 - 单词方块
算法·leetcode·职场和发展
小龙报1 天前
《DevC++支持C++11等与其软件分辨率低的解决办法》
c语言·c++·windows·蓝桥杯·pat考试·学习方法·dvc++
程序员小远1 天前
软件测试之bug分析定位技巧
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·bug