思路:按数学思维求出来每条冶炼记录的最大值与最小值,因为要满足所有记录,则要取之后取每条记录的最小值中的最大值,每条记录的最大值中的最小值,两者则为答案。
最大值:
假设将所有材料利用率达到最大,则用所有普通金属/特殊金属则为该记录能取得的最大转化率;
Vmax=A [i] /B [i] ;
最小值:
假设每条记录中还差一个普通金属就可以合成下一个特殊金属了,则此时浪费率最大,转化率显然最小;
Vmin=A [i] /(B [i]+1)+1;A [i] /(B [i]+1)表示能取得的最小转化率的前一位,加一就表示能取得的最小转化率;
C++代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int n =10005;
int N;
int A[n],B[n];
int Vmin,Vmax=0x3f3f3f3f;
int main()
{
cin >> N;
for (int i = 1; i <= N; i ++ ){
cin >> A[i] >> B[i];
}
for (int i = 1; i <= N; i ++ ){
Vmin=max(Vmin,A[i]/(B[i]+1)+1);
Vmax=min(Vmax,A[i]/B[i]);
}
cout<<Vmin<<' '<<Vmax;
return 0;
}