C++
$\color{gold}{— > 蓝桥杯辅导课题解}$
思路:
推公式
$通过maxv存储转换率的最大值, minv存储转换率的最小值$
$1、最大值maxv是比较好想的,直接算每组 a/b的最小值即可$
$2、最小值minv比较难想,有点脑筋急转弯的感觉,$
$\ \ \ \ \ 根据转换率v的定义:消耗 v个普通金属 O 恰好可以冶炼出一个特殊金属 X$
$\ \ \ \ \ 那么可以算一下每组a/(b + 1)的最大值,最后 + 1即可$
$时间复杂度:O(n)$
#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
cin >> n;
int maxv = 1e9, minv = -1e9;
while (n -- ) {
int a, b;
cin >> a >> b;
maxv = min(maxv, a / b);
minv = max(minv, a / (b + 1));
}
cout << minv + 1 << ' ' << maxv;
return 0;
}
Java code
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int maxv = (int)1e9, minv = -(int)1e9;
while (n -- > 0) {
int a = sc.nextInt(), b = sc.nextInt();
maxv = Math.min(maxv, a/b);
minv = Math.max(minv, a/(b + 1));
}
System.out.printf("%d %d", minv + 1, maxv);
}
}
呜呜呜,考试的时候maxv,minv初始化小了,寄了😭