极限优化暴力+特殊判定+O2=一道蓝题
#include <bits/stdc++.h>
using namespace std;
double a[101],b[101];
long long sum[10001]={0};
int n;
bool f=1;
long long maxs(long long sum[],bool &f){
long long max=-1e9,max_i=-1,pre=sum[0];
bool ff=0;
for (int i=0;i<n;++i){
if (max<sum[i]){
max=sum[i];
max_i=i;
}
if (sum[i]!=pre){
ff=1;
}
}
if (!ff){
f=0;
}
return max_i;
}
int main()
{
cin>>n;
long long sums=1;
bool fff=0;
for (int i=0;i<n;++i){
cin>>a[i]>>b[i];
if (b[i]+1!=a[i]){
fff=1;
}
sums*=a[i];
sum[i]=b[i];
}
if (!fff){
cout<<sums-1<<endl;
return 0;
}else{
while (f){
int max_i=maxs(sum,f);
int sums=sum[max_i];
bool ff=0;
for (int i=0;i<n;++i){
if (i!=max_i){
sum[i]+=ceil((sum[max_i]-sum[i])/a[i])*a[i];
//cout<<sum[i]<<" "<<i<<endl;
}
if (sum[i]!=sums){
ff=1;
}
}
if (!ff){
break;
}
//cout<<endl;
}
cout<<sum[0]<<endl;
}
return 0;
}