zoukankan      html  css  js  c++  java
  • HDOJ4503 湫湫系列故事——植树节

    湫湫系列故事——植树节

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


    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
     
    Source
     

    题解:

      本题采用逆向思维,先求关系不完全相同的组合个数,可以把每个人看做一个节点,
    则其朋友的个数看做度,则构成无向图,则3个关系不完全相同就是3个点有1条或者
    两条边

     1 #include <cstdio>
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 int num[1005];
     7 
     8 int main()
     9 {
    10     int T, n;
    11     scanf("%d", &T);
    12     while(T--)
    13     {
    14         scanf("%d", &n);
    15         int tot = 0;
    16         for(int i = 0; i < n; ++i)
    17         {
    18             scanf("%d", &num[i]);
    19             tot += num[i] * (n - 1 - num[i]);
    20         }
    21         tot >>= 1;   //  每个结果被计算了两次
    22         int t = n * (n-1) * (n-2) / 6;
    23         printf("%.3f\n", 1.0 * (t - tot) / t);
    24     }
    25     return 0;
    26 }
    功不成,身已退
  • 相关阅读:
    Java实现 LeetCode 437 路径总和 III(三)
    Java实现 LeetCode 436 寻找右区间
    Java实现 LeetCode 436 寻找右区间
    Java实现 LeetCode 436 寻找右区间
    Java实现 LeetCode 435 无重叠区间
    Java实现 LeetCode 435 无重叠区间
    Makefile第一讲:一个简单的Makefile
    GCC常用参数
    GCC参数详解
    linux .o,.a,.so文件解析
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2976554.html
Copyright © 2011-2022 走看看