您的位置:首页 > 其它

hdu 4503(湫湫系列故事——植树节)

2013-04-13 10:51 162 查看
题解:

这题不太好想,参考了下别人的思想,加自己的详细补充:
1. 从反面想,若能求出3个人之间有一条关系或者两条关系的总数,问题便可解(余下就是三人两两相互关系和两两无关系)。
2.对于点i,剩下的n-1个点可分为两个集合,一个是和i有关系的a[i],一个是没有关系的(n-1-a[i]),
从这俩集合里分别取一个点,组成三个点,便符合了三个人之间有一条关系或者两条关系的条件。res=Σ(a[i] * (n-1-a[i])),
3.在求和后的res中,
你会发现三人有一条关系的情况下,有关系的两人被算了两次。
有两条关系的情况下,无关系的两人被算了两次。
(自己作个简单图帮助理解)因为刚好的数了两次,所以结果要除2

#include<stdio.h>
int main()
{
int T;
int n;
int a;
double res;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
res=0.0;
for(int i=0;i<n;i++)
{
scanf("%d",&a);
res+=(n-a-1)*a;
}
printf("%.3lf\n",1.0-res*3/n/(n-1)/(n-2));//运算后的式子
}
return 0;
}


---恢复内容结束---
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: