链接
大意
给定 n<=30000 n <= 30000 个数,求最接近黄金分割比的一组数
思路
暴力的话肯定超时,我们可以先排序,利用单调性使时间复杂度降低至 O(nlogn) O ( n l o g n )
代码
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;int n,a[30001];
double gold=0.6180339887498949,k,ans=12345678;int t1,t2;
int main()
{
scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+1+n);int i=1,j=2;
while(j<=n)
{
k=a[i]/1.0/a[j]-gold;
if(fabs(k)<ans){t1=i;t2=j;ans=fabs(k);}//调整
if(k>0) j++;else i++;//调整
while(!a[j]&&j<n) j++;//避免整数被0除
}
printf("%d\n%d",a[t1],a[t2]);//输出
}