猜测答案一定能表示为分子分母均不超过值域加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;
}
然后就过了