1 条题解
-
0
#include<bits/stdc++.h> #define int ll using namespace std; typedef long long ll; const double pi=acos(-1.0); int r[2000010]; void FFT(complex<double> a[],ll n,int op){ for(int i=0;i<n;i++)if(i<r[i])swap(a[i],a[r[i]]); for(int m=2;m<=n;m<<=1){ complex<double> w1={cos(2*pi/m),sin(2*pi/m)*op}; for(int i=0;i<n;i+=m){ complex<double> wk={1,0}; for(int j=0;j<m/2;j++){ complex<double> x=a[i+j],y=a[i+j+m/2]*wk; a[i+j]=x+y;a[i+j+m/2]=x-y; wk=wk*w1; } } } } complex<double> a[2000010]; ll tt[2000010],b[2000010],A[2000010]; signed main(){ int t; cin>>t; while(t--){ ll n; cin>>n; ll mx=0; for(int i=0;i<n;i++){ cin>>A[i]; tt[A[i]]++; mx=max(mx,A[i]); } ll m=1; while(m<mx+mx+1)m<<=1; for(int i=0;i<m;i++)r[i]=r[i/2]/2+(i&1)*m/2; for(int i=0;i<m;i++)a[i]={tt[i],0}; FFT(a,m,1); for(int i=0;i<m;i++){ a[i]=a[i]*a[i]; } FFT(a,m,-1); for(int i=0;i<m;i++){ b[i]=(ll)(a[i].real()/m+0.5); } for(int i=0;i<n;i++)b[2*A[i]]--; for(int i=0;i<m;i++)b[i]/=2; for(int i=1;i<m;i++){ b[i]=b[i-1]+b[i]; } double ans=0,c=n*(n-1)*(n-2)/6.0; for(int i=0;i<n;i++){ ans+=b[A[i]]; } ans=1.0-ans/c; printf("%.7lf\n",ans); for(int i=0;i<=m;i++)tt[i]=0; } return 0; }
- 1
信息
- ID
- 5178
- 时间
- 5000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 33
- 已通过
- 5
- 上传者