Codeforces 107B Basketball Team 简单概率
2015-06-05 15:59
399 查看
题目链接:点击打开链接
题意:
给定n m h
表示有m个部门,有个人如今在部门h
以下m个数字表示每一个部门的人数。(包含他自己)
在这些人中随机挑选n个人,问挑出的人中存在和这个人同部门的概率是多少。
这个人一定在挑出的n个人中。
反向思考。答案是 1 - 不可能概率
不可能概率 = C(n-1, sum-1-a[h]) / C(n-1, sum-1)
发现2个组合数的分母部分同样,所以仅仅须要把2个组合数的分子部分相除就可以。
题意:
给定n m h
表示有m个部门,有个人如今在部门h
以下m个数字表示每一个部门的人数。(包含他自己)
在这些人中随机挑选n个人,问挑出的人中存在和这个人同部门的概率是多少。
这个人一定在挑出的n个人中。
反向思考。答案是 1 - 不可能概率
不可能概率 = C(n-1, sum-1-a[h]) / C(n-1, sum-1)
发现2个组合数的分母部分同样,所以仅仅须要把2个组合数的分子部分相除就可以。
#include <cstdio> #include <iostream> #include <algorithm> #include <string.h> #include <map> #include <set> using namespace std; #define N 10010 int n, m, h, a ; void solve(){ int sum = 0; for(int i = 1; i <= m; i++) scanf("%d",&a[i]), sum += a[i]; if(sum < n){ puts("-1");return ; } n--; sum--; a[h]--; if(sum - a[h] < n){puts("1");return;} double ans = 1.0; double x = sum-a[h], y = sum; for(int i = 1; i <= n; i++) { ans *= x / y; x--; y--; } printf("%.10f\n", 1.0 - ans); } int main(){ while(~scanf("%d %d %d",&n,&m,&h)){ solve(); } return 0; }
相关文章推荐
- iOS archiveRootObject 归档失败问题
- 【Java23种设计模式学习笔记】一:策略模式
- C语言实现缓冲区溢出实例
- 寄存器
- 程序间协作方式-shell out
- android 快捷技巧
- ajax请求弹出窗口被浏览器拦截的问题
- 利用客户端解决方案改进跨域通信
- 从程序运行效率角度谈开发规范
- Codeforces Round #306 (Div. 2) A B C
- 第九题 P035
- WordPress插件 Wpzt Player 自适应音乐网络电台播放器[更新至v1.0.0]
- 【转】32位移植到64位 注意事项 ----不错
- override与overload的区别
- Python.h:No such file or directory
- [Android Bug] ListView中Header, Footer无法隐藏(gone)的问题
- MD5加密
- java_notes_static、final、内部类、代码块
- 如何利用VC++构建一个游戏框架
- C#使用semaphore来管理异步下载请求的方法