HDU4254 A Famous Game
luogu嘟嘟嘟
这题刚开始特别容易理解错:直接枚举所有\(n + 1\)种情况,然后算哪一种情况合法,再统计答案。
上述思想的问题就在于我们从已知的结果出发,默认这种每一种情况中取出\(q\)个红球,\(p -q\)个蓝球的概率是1,但实际上无法保证取出的红球或是蓝球的数量刚好是这些。
那应该是啥咧,设袋中红球数量是\(i\),则蓝球就是\(n - i\),那么这种取法的概率是\(\frac{C_{i} ^ {q} * C_{n - i} ^ {p - q}}{C_{n} ^ {p}}\),记为\(p1(i)\)。
在这个条件下,我们再乘以\((i - q) / (n - p)\),才是再取一个球是红球的概率,记为\(p2(i)\)。
如果直接输出\(\sum p2(i)\),那表示的是取出\(p\)个球是任意球的情况下的概率,所以根据条件概率公式,我们应该再除以一个上面的\(\sum p1(i)\)。
还有一个问题,组合数太大,又没有取模。这里有一个trick,就是观察到算出来的概率很小(小于1),因此我们算组合数的时候都取一个log,然后算答案的时候再乘方回来就妥了。
(其实这题可以\(O(1)\)做,答案是\(\frac{q + 1}{p + 2}\),但这个我实在推不出来)
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
#include<assert.h>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define In inline
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-8;
const int maxn = 1e5 + 5;
In ll read()
{
ll ans = 0;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) last = ch, ch = getchar();
while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
if(last == '-') ans = -ans;
return ans;
}
In void write(ll x)
{
if(x < 0) x = -x, putchar('-');
if(x >= 10) write(x / 10);
putchar(x % 10 + '0');
}
In void MYFILE()
{
#ifndef mrclr
freopen(".in", "r", stdin);
freopen(".out", "w", stdout);
#endif
}
int n, p, q;
int a[maxn], b[maxn];
db f[maxn];
In db logC(int n, int m) {return f[n] - f[m] - f[n - m];}
int main()
{
//MYFILE();
int T = 0;
for(int i = 1; i < maxn; ++i) f[i] = f[i - 1] + log(1.0 * i);
while(scanf("%d%d%d", &n, &p, &q) != EOF)
{
db a = 0, b = 0;
for(int i = q; i <= n - p + q; ++i)
{
int j = n - i;
db tp1 = exp(logC(i, q) + logC(n - i, p - q) - logC(n, p));
db tp2 = (i * 1.0 - q) / (n - p);
a += tp1 * tp2, b += tp1;
}
printf("Case %d: %.4lf\n", ++T, a / b);
// printf("%.4lf\n", (q + 1.0) / (p + 2));
}
return 0;
}
HDU4254 A Famous Game的更多相关文章
- 各种trick和细节错误汇总
这篇博客主要是用来记自己写代码的时候犯的各种小技巧和低级失误,好提醒自己,从而尽量缩短debug时间. 点分治 1.求每一个子树到重心的距离的函数接口应该是dfs2(v, eg, e[i].w)而不是 ...
- ubuntu kylin 14.04安装Node.js和Famous
默认使用软件中心安装node.js,然后参考https://famo.us/install进行安装 1.sudo apt-get install git 2.npm install -g yo gru ...
- Reading Famous blog to prevent me wasting time on blind wandering
I can`t help surfing the useless bbs and some other kind of SNS. The time I begin to do it, it costs ...
- HDU 4251 The Famous ICPC Team Again 主席树
The Famous ICPC Team Again Problem Description When Mr. B, Mr. G and Mr. M were preparing for the ...
- ACM The Famous Clock
The Famous Clock 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 Mr. B, Mr. G and Mr. M are now in Warsaw, ...
- hdu 4255 A Famous Grid
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4255 A Famous Grid Description Mr. B has recently dis ...
- 07-语言入门-07-A Famous Music Composer
题目地址: http://blog.csdn.net/sevenmit/article/details/8231994 描述 Mr. B is a famous music composer. On ...
- A Famous Music Composer
描述 Mr. B is a famous music composer. One of his most famous work was his set of preludes. These 24 p ...
- HDOJ 4252 A Famous City 单调栈
单调栈: 维护一个单调栈 A Famous City Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
随机推荐
- go guid 和uuid生成
1 安装 开始-运行 输入 cmd 回车 输入 go get -u github.com/typa01/go-utils 安装完毕后 2 使用 a 首先引入包 import ( goutil ...
- AX 中临时表应用
临时表,只要让表的Temporary属性设为yes就行. 今天写代码时发现,假如在一个循环里面把数据插入到临时表里, 假如没有在每次开始时没加clear的话,假如有个字段下一条没数据,会自动带到下一条 ...
- io.ByteIO和open操作二进制流的区别(转)
转自Stack Overflow:https://stackoverflow.com/questions/42800250/difference-between-open-and-io-bytesio ...
- 如何加入 Skype for Business 会议?
参加一个线上培训,收到了Skype的参会地址,是这个样子的 然后就是一脸懵逼的不知道怎么参加会议了.找了半天终于在同事的帮助下参加成功. 我的参加方法:在Window上用Skype for Busin ...
- Gogs + Drone 实现CI/CD(CD)
前文已经实现CI部分,本文继续以Asp.Net Core实现CD部分. 创建gogs仓库 首先在gogs创建一个空项目drone-ci-demo,本地新建一个asp.net core项目,并且在与.c ...
- [转]Entity Framework 异常: 'OFFSET' 附近有语法错误。\r\n在 FETCH 语句中选项 NEXT 的用法无效
https://blog.csdn.net/weixin_34321977/article/details/85850064 在使用 EF 的时候,突然发现更新后在服务器中运行出错,异常信息主要包含以 ...
- 我们为什么要通过python来入IT这一行
我们为什么要通过python来入IT这一行 导语 这个问题,其实大部分在选择转行做IT,或者在行业内处于边缘化的非技术人员都会有这样的疑惑.毕竟,掌握一门技能,是需要花成本的.决策之前,做个前景判 ...
- VUE 元素拖拽、移动
元素拖拽 作者:一粒尘土 时间:2019-10-30 使用范围:两个元素位置交换,移动元素到指定位置 涉及函数 属性 解释 draggable 是否允许元素进行拖拽 dragstart 拖拽开始触发的 ...
- MySQL 数据库的安装与卸载
一.安装 (1)打开下载的 mysql 安装文件双击解压缩,运行“mysql-5.5.40-win32.msi” (2)选择安装类型, 有“Typical(默认) ”. “Complete(完全) ” ...
- JavaScript CryptoJS库 加密与解密
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...