P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
二分做法:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e4+10;
int n,a,b;
int v[N],cnt[N];
int check(int x){for(int i=1;i<=n;i++){int t=v[i]/x;if(t<cnt[i]){return 1;//x太大了 }else if(t>cnt[i]){return 2;//x太小了 }}return 0;
}
signed main()
{cin>>n;for(int i=1;i<=n;i++){cin>>v[i]>>cnt[i];}int mi=-1,mx=-1;int l=1,r=1e9;while(l<=r){int mid=l+r>>1;int t=check(mid);if(t==0){mx=mid;l=mid+1;//因为x要尽可能大,故mid可以的话就尝试mid+1 }else if(t==1){r=mid-1;}else{l=mid+1;}}l=1,r=1e9;while(l<=r){int mid=l+r>>1;int t=check(mid);if(t==0){mi=mid;r=mid-1;//因为x要尽可能小,故mid可以的话就尝试mid-1}else if(t==1){r=mid-1;}else{l=mid+1;}}cout<<mi<<" "<<mx;return 0;
}