题目的链接:HDU 4503
一开始题目的意思理解错了,以为是数字相等就代表关系相同。后来才知道,数字代表他有几个朋友,而且朋友关系是互相的。
根据题目的意思是选全部都是朋友或者全部都不是朋友的,那么他的对立面就是两个人是朋友另外一个不是。然后1-发生这种情况的概率就好了。
注意点是: 1 选择朋友的时候是选择一个,因为自己也是一个。
2 选择不是朋友的时候应该是总人数减去朋友的个数,再减去一(自己也要去除)
3 选择朋友的情况要除以2, 因为好友关系是互相的,你选择一个人的同时那个人也可以选择你。
下面是代码:
#include<stdio.h>
#include<string.h>
const int N = 1005;
double f[N][4];
void C()
{
f[2][2] = f[2][0] = 1,f[2][1] = 2;
for(int i = 3; i <= 1000; ++i)
{
f[i][0] = 1;
f[i][1] = i;
f[i][2] = i * (i - 1) / 2;
f[i][3] = f[i][2] * (i - 2) / 3;
}
}
int main()
{
void C();
C();
int T;
int n;
int a[N];
scanf("%d", &T);
while(T--){
double ans = 0;
scanf("%d", &n);
for(int i = 0; i < n; ++i)
scanf("%d", a + i);
for(int i = 0; i < n; ++i)
ans += a[i] * (n - a[i] - 1);
ans /= 2;
printf("%.3lf\n", 1 - ans / f[n][3]);
}
return 0;
}