洛谷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;
}
相关推荐
dayuOK630714 天前
写作卡壳怎么办?我的“5分钟启动法”
人工智能·职场和发展·自动化·新媒体运营·媒体
枫子有风14 天前
LLM-Agent智能体(大厂面试常问)
面试·职场和发展·llm·agent
重生之后端学习14 天前
Java入门
java·开发语言·职场和发展
AIHR数智引擎14 天前
KPI物理失效:AI原生组织的效能重构与技能度量
人工智能·经验分享·职场和发展·重构·ai-native·aihr
想吃火锅100514 天前
【leetcode】121.买卖股票的最佳时机js/c++
算法·leetcode·职场和发展
程序员小远14 天前
自动化测试基础知识总结
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
嘿黑嘿呦14 天前
chap 8排序
算法·蓝桥杯·排序算法·软件工程
小欣加油14 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
旧曲重听114 天前
2026前端技术从「夯」到「拉」
前端·程序人生·职场和发展·软件工程
javaDocker14 天前
某大厂AI应用开发面试题
面试·职场和发展