HDU 4503


湫湫系列故事——植树节

Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 1025 Accepted Submission(s): 604

Problem Description
  今天是一年一度的植树节,腾讯幼儿园要求每个老师在班里选出几个小朋友一起去野外种植小树苗,根据学校的整体安排,湫湫老师的班里要选出3个小朋友。 已知湫湫的班里共有n个孩子,每个孩子有Bi个朋友(i从1到n),且朋友关系是相互的,如果a小朋友和b小朋友是朋友,那么b小朋友和a小朋友也一定是好朋友。为了选择的公平性,湫湫老师会随机抽取3个小朋友出来(每个人被抽到的概率相同),但是她很希望这3个小朋友之间的关系完全相同,湫湫老师想请你帮她算算抽到的3个小朋友正好关系相同的概率是多少?
  PS. 关系相同就是指要么3个人互相是好朋友,要么3个人互相都不是好朋友。

Input
输入数据第一行是一个整数T(1<=T<=1000),表示输入数据的组数;每组数据的第一行是一正整数n表示孩子的总数(2<n<=1000),第二行有n个数Bi (i从1到n),分别代表每个小朋友的朋友的个数。

Output
对于每组数据,请输出抽到的3个小朋友关系相同的概率,结果保留3位小数。

Sample Input
1
5
3 3 3 3 4

Sample Output
0.400

分析:

求正面不容易求,那么就求反面。

由题易知,若不满足题中条件,则3个人中必有两个人是朋友,而另外一个人和其中一个或零个是朋友。就相当于3个点之间只能有两条或一条直线。

每个人都有可能抽到,那么如果抽到第i个人,另外两个人只能在自己朋友中(Bi)抽一个和不是自己朋友中(n-Bi-1)抽一个才能不满足题中条件,有朋友也许会问:"如果抽到第i个人,另外两个在第i个人的不是朋友中抽,也可能不满足题中条件,比如当另外两个人是朋友,而这两个人都不是第i个人的朋友"。确实,有这种可能,但是我所说的包含你说的这种可能了,因为假设另外两个人是j和k,那么把i换成j或k,不就把这种情况包含进去了么。
现在,又出了个新的问题:是否有重复事件?
 是的,确实有重复了,如前文,若在j处选了i和k,然后在k处选了i和j。那么这就重复了,因此算出的反面事件除以2就是正确的反面事件的个数。而总事件为C(n,3),
设咱们求出反面事件的个数为sum,那么答案ans=1-sum/C(n,3);

代码如下:


 1 #include <stdio.h>
2 #include <string.h>
3 #include <algorithm>
4 #include <iostream>
5 using namespace std;
6
7 main()
8 {
9 int t, n, a[1005], i, j;
10 double ans, sum;
11 cin>>t;
12 while(t--)
13 {
14 scanf("%d",&n);
15 ans=0.0;
16 for(i=1;i<=n;i++)
17 {scanf("%d",&a[i]);
18 ans+=a[i]*(n-1-a[i]);
19 }
20 ans/=2.0;
21 sum=(n-1)*(n-2)*n/6;
22 ans=ans/sum;
23 printf("%.3lf\n",1-ans);
24 }
25 }

时间: 2024-12-18 11:41:42

HDU 4503的相关文章

HDU 4503准浊渍祝总诅

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

hdu 4503(数学,概率)

湫湫系列故事——植树节 Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1315    Accepted Submission(s): 796 Problem Description 今天是一年一度的植树节,腾讯幼儿园要求每个老师在班里选出几个小朋友一起去野外种植小树苗,根据学校的整体安排,湫湫老师的班里要选出3个小朋 友.  已知湫湫的班

hdu 4503 湫湫系列故事——植树节(组合概率)

这是一道求组合的题.中文题面应该能看懂,废话不多说下面来说说这道题. 可以选的总组合数是Ck3 那么选到3个人的关系都相同,要么都认识,要么都不认识.可以重反面来考虑,就是求三个人的关系不都相同. 那么对于第一个人有guanxi[1]个与他认识有k-guanxi[1]-1个与他不认识,那么符合三个人关系不都相同的种数为(k-guanxi[1]-1)*guanxi[1]: 同理对于后面的人也是这样的. 最后把这些种数加起来,这里面肯定有重复的,比如A与B认识与C不识,B与C相识,计算A时的组合为A

2013腾讯编程马拉松初赛第〇场(3月20日)(HDU 4500 4501 4502 4503 4504)

小Q系列故事--屌丝的逆袭 Time Limit : 300/100ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 1   Accepted Submission(s) : 1 Problem Description 毕业于普通本科的小Q一直自称是资深屌丝,不仅学校不知名,甚至他自己在这个普通学校也是默默无闻--直到临近毕业的时候,班里5朵金花中的2位甚至从没和他说过话! 谁又能想到

HDU ACM 4503 湫湫系列故事——植树节

分析:概率题,不符合关系=1-相同关系=1-(都是朋友+都不是朋友):n-a[i]-1=总人数-有关系的人-本身,即无关系人数:a[i],有关系人数:不符合关系情况=本身*有关系人数*无关系人数:总的不符合关系情况=所有不符合关系情况累加/2(除以2是因为:你是我的朋友=我是你的朋友):总人数:C(3,n)=n*(n-1)*(n-2)/6. #include<iostream> using namespace std; int main() { int T,n,i,Bi,sum,cn3; ci

HDU 6203 ping ping ping [LCA,贪心,DFS序,BIT(树状数组)]

题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=6203] 题意 :给出一棵树,如果(a,b)路径上有坏点,那么(a,b)之间不联通,给出一些不联通的点对,然后判断最少有多少个坏点. 题解 :求每个点对的LCA,然后根据LCA的深度排序.从LCA最深的点对开始,如果a或者b点已经有点被标记了,那么continue,否者标记(a,b)LCA的子树每个顶点加1. #include<Bits/stdc++.h> using namespace std;

HDU 5542 The Battle of Chibi dp+树状数组

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5542 题意:给你n个数,求其中上升子序列长度为m的个数 可以考虑用dp[i][j]表示以a[i]结尾的长度为j的上升子序列有多少 裸的dp是o(n2m) 所以需要优化 我们可以发现dp的第3维是找比它小的数,那么就可以用树状数组来找 这样就可以降低复杂度 #include<iostream> #include<cstdio> #include<cstring> #include

hdu 1207 汉诺塔II (DP+递推)

汉诺塔II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4529    Accepted Submission(s): 2231 Problem Description 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往

[hdu 2102]bfs+注意INF

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 感觉这个题非常水,结果一直WA,最后发现居然是0x3f3f3f3f不够大导致的--把INF改成INF+INF就过了. #include<bits/stdc++.h> using namespace std; bool vis[2][15][15]; char s[2][15][15]; const int INF=0x3f3f3f3f; const int fx[]={0,0,1,-1};