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


     这是一道求组合的题。中文题面应该能看懂,废话不多说下面来说说这道题。

    可以选的总组合数是Ck3

    那么选到3个人的关系都相同,要么都认识,要么都不认识。可以重反面来考虑,就是求三个人的关系不都相同。

    那么对于第一个人有guanxi[1]个与他认识有k-guanxi[1]-1个与他不认识,那么符合三个人关系不都相同的种数为(k-guanxi[1]-1)*guanxi[1];

    同理对于后面的人也是这样的。

    最后把这些种数加起来,这里面肯定有重复的,比如A与B认识与C不识,B与C相识,计算A时的组合为ABC,计算B时的组合为0,计算C时组合为CBA,

    那么就有重复了。

    因为每两个人只会对应一种关系所以A与B认识,在选A时选了AB,然后再加个不认识的C,在选B时如果有BAC这个组合,那么说明C与B的关系是不识,那么当在选C时

    就不可能再选到ABC这组合,如果在选C时存在ABC,说明C认识B,那么在选B时就不可能有ABC了。所以这样的话就是每个组合都重复了以次,所以总得不符合个数/2就为不符合的实际个数。

    那么问题就解决了为总的组合数-实际不符合的个数。

    下面看代码:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<math.h>
     5 typedef long long ll;
     6 double guanxi[2000];
     7 int main(void)
     8 {
     9     int i,j,k,p,q,n;
    10     double x,y;
    11     scanf("%d",&n);
    12     while(n--)
    13     {
    14         scanf("%d",&k);
    15         ll dd=0;
    16         for(i=0; i<k; i++)
    17         {
    18             scanf("%lf",&guanxi[i]);
    19             dd+=(k-guanxi[i]-1)*guanxi[i];
    20 
    21         }
    22         ll x1=k*(k-1)*(k-2)/6;//总的组合数
    23         double x2=x1-dd/2;//dd/2为实际不符合的个数。
    24         x=1.0*x2/(1.0*x1);
    25         printf("%.3f
    ",x);
    26     }
    27     return 0;
    28 
    29 }
    油!油!you@
  • 相关阅读:
    python中的编码问题
    CVPR2018 Tutorial 之 Visual Recognition and Beyond
    hdu 1376 Octal Fractions
    hdu 1329 Hanoi Tower Troubles Again!
    hdu 1309 Loansome Car Buyer
    hdu 1333 Smith Numbers
    hdu 1288 Hat's Tea
    hdu 1284 钱币兑换问题
    hdu 1275 两车追及或相遇问题
    hdu 1270 小希的数表
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/4935388.html
Copyright © 2020-2023  润新知