#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int record[10000][2];
int main() {
//向下取整 也就是
int N;
cin>>N;
for(int i=0;i<N;i++)
{ int A,B;cin>>A>>B;
record[i][0]=A,record[i][1]=B;
}
int minV=200,maxV=0;
for(int V=1;V<=10000000;V++){
bool flag=true;
for(int i=0;i<N;i++){
if((record[i][0]/V)!=record[i][1]){
flag=false;
break;
}
}
if(flag){
if(minV==200)minV=V;
maxV=V;
}
}
cout<<minV<<" "<<maxV;
return 0;
}
我的算法 直接枚举 关键在于那个V的取值范围 一定要够大的,当你没想到用二分 可以试试这个方法 我在蓝桥杯训练系统中 所有案例均是通过的。