我貌似发现了偏解
查看原帖
我貌似发现了偏解
996255
ikun_god楼主2024/2/22 20:27

极限优化暴力+特殊判定+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;
}
2024/2/22 20:27
加载中...