我们充分发扬人类智慧
查看原帖
我们充分发扬人类智慧
712794
Azure_Space楼主2024/6/30 19:59

猜测答案一定能表示为分子分母均不超过值域加1的分数,于是:

#include<bits/stdc++.h>
using namespace std;
int a[1006];
int main()
{
	int n;
	double ans;
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	n=unique(a+1,a+n+1)-1-a;
	ans=0;
	int be=clock();
	for(int i=1;i<=1001;i++)
		for(int j=1001;j>=i+1;j--)
		{
			int pd=1;
			double zhi=1.0*j/i;
			for(int k=1;k<=n;k++)
			{
				int xx=floor(1.0*(a[k]+1)/zhi);
				if((double)xx*zhi<=a[k])
				{
					pd=0;
					break;
				}
			}
			if(pd)
			{
				ans=max(ans,zhi);
				break;	
			}
		}
	/*while((double)(clock()-be)/CLOCKS_PER_SEC<0.99)
	{
		bool pd=1;
		for(int i=1;i<=n;i++)
		{
			int xx=floor(1.0*(a[i]+1)/ans);
			if((double)xx*ans<=a[i]) pd=0,ans=1.0*(a[i]+1)/(xx+1);
		}
		if(pd) break;
	}
	//if((double)(clock()-be)/CLOCKS_PER_SEC>=0.99) printf("%.6lf",(double)(a[n]+1)/a[n]);*/
	printf("%.6lf",ans);
	return 0;
}

然后就过了

2024/6/30 19:59
加载中...