#include<iostream>
using namespace std;
int b[1005];
void run()
{
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&b[i]);
double ans=0;
for(i=0;i<n;i++) ans+=(b[i] * (n-b[i]-1));
ans=ans/2.0;
double total=n*(n-1)*(n-2)/6.0;
printf("%.3lf\n",1-ans/total);
}
int main()
{
int T;
cin>>T;
while(T--) run();
return 0;
}
想法题:因为要么3人都是好友要么3人都不是好友,把3人想象成3个点,即3点间必须有3条边或者0条边。
反过来就有2个条或1条边
b[i] * (n-b[i]-1)/2; //考虑到效率 整体相加后再除
1-ans/total即可!