# 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$ 可能的最小值和最大值,中间用空格分开。
## 输入输出样例 #1
### 输入 #1
```
3
75 3
53 2
59 2
```### 输出 #1
```
20 25
```## 说明/提示
**【样例说明】**
当 $V=20$ 时,有:$\left\lfloor\frac{75}{20}\right\rfloor=3,\left\lfloor\frac{53}{20}\right\rfloor=2,\left\lfloor\frac{59}{20}\right\rfloor=2$,可以看到符合所有冶炼记录。
当 $V=25$ 时,有:$\left\lfloor\frac{75}{25}\right\rfloor=3,\left\lfloor\frac{53}{25}\right\rfloor=2,\left\lfloor\frac{59}{25}\right\rfloor=2$,可以看到符合所有冶炼记录。
且再也找不到比 $20$ 更小或者比 $25$ 更大的符合条件的 $V$ 值了。
**【评测用例规模与约定】**
对于 $30 \%$ 的评测用例,$1 \leq N \leq 10^{2}$。
对于 $60 \%$ 的评测用例,$1 \leq N \leq 10^{3}$。
对于 $100 \%$ 的评测用例,$1 \leq N \leq 10^{4}$,$1 \leq B \leq A \leq 10^{9}$。
蓝桥杯 2023 省赛 B 组 C 题。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1000+10;
ll a[N],b[N],c[N],d[N];
const int inf=0x3f3f3f3f;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i]>>b[i];
}
ll m1=inf,m2=0;
for(int i=0;i<n;i++)
{
c[i]=a[i]/b[i];
m1=min(c[i],m1);
d[i]=a[i]/(b[i]+1);
m2=max(d[i],m2);
}
cout<<m2+1<<" "<<m1<<endl;
return 0;
}
总结思考:
第一次没有AC的原因是开数组占得内存太大,没通过
第二次,修正采用while循环,不需要存储,直接比较;
根据样例可以观察得到,最大的V就是a/b里面选择的最小的,即可满足的最大的
最小的V就是a/(b+1)里面选择最大的,最后加上1,即可满足的最小的