FZU - 2103 Bin & Jing in wonderland

  题目大意:有n个礼物,每次得到第i个礼物的概率是p[i],一个人一共得到了k个礼物,然后按编号排序后挑选出r个编号最大的礼物。现在给出r个礼物的编号,问能得到这r个礼物的概率。

  首先剩下的k-r个礼物中的编号肯定不能大于r个礼物中最小的编号id,我们就根据id把礼物分成两部分,一部分就是编号大于Id的礼物的,另一部分就是剩下的。对于编号大于id的礼物选取的概率,当前剩余nk1个空位,那么就是挑选num[i]个位置来放它,C[nk1][num[i]*pow(p[i],num[i]),然后概率累乘。而剩下的部分,空位有nk2=k-r+num[id]个,小于id是礼物概率之和是pn,那么我们枚举id礼物有i个,小于id的就有nk2-i个,第一个可以在[1,id)内任意取,第二个也是一样。。这部分概率就是pow(pn,nk2-i),那id礼物有i个这种情况下的概率就是C[nk2][i]*pow(p[id],i)*pow(pn,nk2-i),然后概率累加。最后两部分的概率相乘就是最终答案。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 typedef long long ll;
 5 int num[25];
 6 ll C[55][55];
 7 double p[25];
 8 void init()
 9 {
10     for(int i=0;i<=52;i++)
11     {
12         C[i][0]=1ll;
13         for(int j=1;j<=i;j++)
14         {
15             if(j<=i/2)
16                 C[i][j]=C[i-1][j-1]+C[i-1][j];
17             else
18                 C[i][j]=C[i][i-j];
19         }
20     }
21 }
22 double pow(double x,int y)
23 {
24     double ans=1.0;
25     while(y)
26     {
27         if(y&1)
28             ans*=x;
29         x*=x;
30         y>>=1;
31     }
32     return ans;
33 }
34 int main()
35 {
36     init();
37     int t,n,k,r;
38     scanf("%d",&t);
39     while(t--)
40     {
41         scanf("%d%d%d",&n,&k,&r);
42         for(int i=1;i<=n;i++)
43         {
44             scanf("%lf",&p[i]);
45             num[i]=0;
46         }
47         int id=n+1,x;
48         for(int i=1;i<=r;i++)
49         {
50             scanf("%d",&x);
51             id=min(id,x);
52             num[x]++;
53         }
54         int nk1=k,nk2=k-r+num[id];
55         double ans1=1.0,ans2=0.0,pn=0.0;
56         for(int i=id+1;i<=n;i++)
57         {
58             if(num[i])
59             {
60                 ans1*=1.0*C[nk1][num[i]]*pow(p[i],num[i]);
61                 nk1-=num[i];//用了num[i]个位置,减去
62             }
63         }
64         for(int i=1;i<id;i++)
65             pn+=p[i];
66         for(int i=num[id];i<=nk2;i++)
67             ans2+=1.0*C[nk2][i]*pow(p[id],i)*pow(pn,nk2-i);
68         printf("%.6f\n",ans1*ans2);
69     }
70     return 0;
71 }

看概率过

  

转载于:https://www.cnblogs.com/LMCC1108/p/10809148.html

FZU - 2103 Bin Jing in wonderland相关推荐

  1. python的setting怎么找_django项目的配置文件settings.py详解

    1.2.1 ABSOLUTE_URL_OVERRIDES:默认值:{} 一个字典映射"app_label_module_name"字符串到一个函数,该函数接收一个Model对象作为 ...

  2. 【Django】settings

    作者: Django 团队 译者: weizhong2004@gmail.com 翻译开始日期: 2006-04-04 翻译完成日期: 2006-04-04 修订日期: 2006-05-06 原文版本 ...

  3. python中setting.py详解

    setting.py           这个文件包含了所有有关这个Django项目的配置信息,均大写:   TEMPLATE_DIRS , DATABASE_NAME , 等. 最重要的设置是 RO ...

  4. QQ显示服务器繁忙2103,qq一直出现错误报告.doc

    qq一直出现错误报告 qq一直出现错误报告 QQ错误报告的解决 QQ登录出现错误报告的解决方法 现象:运行QQ时,同时弹出下面的"错误报告"窗口,关闭后QQ密码输入框没法输入密码, ...

  5. pip 升级之后提示 bash: /usr/bin/pip3: No such file or directory

    1. 问题现象 pip 升级之后使用时报错: $ pip3 -V bash: /usr/bin/pip3: No such file or directory 通过命令查找 pip 位置 $ whic ...

  6. 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行

    1. shell 相关 1.1 默认 shell Makefile 所使用的命令是由 shell 命令行组成,他们是一条一条执行的. 多个命令之间要使用分号隔开,Makefile 中的任何命令都要以 ...

  7. docker load 出错 open /var/lib/docker/tmp/docker-import-837327978/bin/json: no such file or directory

    1. 问题现象 使用 docker load 加载镜像包的时候出现如下错误: open /var/lib/docker/tmp/docker-import-837327978/bin/json: no ...

  8. Ubuntu18.04 误删/usr/bin/python3的解决方案

    Ubuntu18.04 误删/usr/bin/python3的解决方案 这应该是一个链接文件,Python.pip3等指令都会指向它,删除之后无法打开Python解释器我在误删之后 首先重新下载了Py ...

  9. fzu 2150 Fire Game 【身手BFS】

    称号:fzu 2150 Fire Game :给出一个m*n的图,'#'表示草坪,' . '表示空地,然后能够选择在随意的两个草坪格子点火.火每 1 s会向周围四个格子扩散,问选择那两个点使得燃烧全部 ...

最新文章

  1. Numpy 对象和字符串相互转换
  2. hibernate 关联总结
  3. 如何用python进行相关性分析_如何在python中检查连续变量和分类变量之间的相关性?...
  4. ARM的编程模式和7种模式
  5. DataV数据可视化功能特性
  6. 【图像处理】MATLAB:基本原理
  7. java向数据库添加中文乱码_java向数据库中插入中文出现乱码
  8. Tapestry5 事件分派机制
  9. 理解两个函数乘积的导数的一种视角
  10. 短信验证码接收app必须注意的那些事
  11. 用计算机怎么打出箭头,箭头怎么打(电脑怎么打长箭头符号) | 土蜂蜜百科网
  12. 输入日期判断这一年的第几天
  13. 电脑登录宽带怎么自动连接服务器地址,宽带自动连接怎么设置
  14. 小米5破解安装centos系统
  15. python编程书在线阅读_Python编程完全入门教程
  16. python做一个登录注册界面_python做一个登录注册界面的方法
  17. Linux内核源代码下载
  18. Java程序员的就业方向
  19. 不同开发语言之Python、Java、Golang对比
  20. 计算机丢失CH375DLL怎么办,修复ch375dll.dll

热门文章

  1. SPI、I2C、UART三种串行总线的原理、区别及应用
  2. 每日一题(28)—— 引用与指针的区别
  3. TQ210——核心板和底板
  4. 利用qsort二级排序
  5. 将Win10包含中文的用户名改为英文的,解决Anaconda navigator无法运行jupyter的问题
  6. c语言作业题五六章答案,数据结构(C语言版)第五六章习题答案
  7. 三十、PHP框架Laravel学习笔记——模型的预加载
  8. LeetCode 156. 上下翻转二叉树(DFS)*
  9. LeetCode 518. 零钱兑换 II(动态规划)
  10. LeetCode 4. 寻找两个有序数组的中位数(二分查找,难)