可以反过来求不是相同关系的小朋友。相当于染色问题吧。
对于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 ",1-ans); } return 0; }