題目描述
小藍有一個神奇的爐子用于將普通金屬 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;
}