可以反过来求不是相同关系的小朋友。相当于染色问题吧。
对于A小朋友,它的T个朋友和另外的(N-1-T)个同学就可以组成一个这样的三角形。T*(N-1-T),由于一条非染色边被计算两次,所以除以2.
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <algorithm>
#define LL __int64
using namespace std;
int main(){
int n,T,t;
scanf("%d",&T);
while(T--){
double ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&t);
ans+=t*(n-t-1)*1.0;
}
ans/=2;
ans=ans*3*2/((n)*(n-1)*(n-2));
printf("%.3lf\n",1-ans);
}
return 0;
}
原文:http://www.cnblogs.com/jie-dcai/p/4367222.html