思路:最大值还是很好找的,mmax=min(mmax,a[i]/b[i]);
然后通过枚举来找最小值,
然后通过l=min(l,(int)(a[i]/(b[i]+1))), 找出到该枚举区间的左边界(优化),然后枚举就行了~
从最小边界开始枚举,第一个符合题意的就是最小值
那时候一直在在想最小值能不能用o1来写(大可不必好吧)
ACcode:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e4+10;
int n,a[N],b[N],mmax=2e18,l=2e18;
void solve() {
cin>>n;
for(int i=1; i<=n; i++) {
cin>>a[i]>>b[i];
mmax=min(mmax,(int)a[i]/b[i]);
l=min(l,(int)(a[i]/(b[i]+1)));
}
for(int i=l;i<=mmax;i++){
int flag=0;
for(int j=1;j<=n;j++){
if(a[j]/i!=b[j]){
flag=1;
break;
}
}
if(!flag){
cout<<i<<" "<<mmax<<"\n";
return;
}
}
}
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int tt=1;
//cin>>tt;
while(tt--) {
solve();
}
return 0;
}
over~