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 ...
随机推荐
- 解决Html页面缓存
对于一个html页面,缓存分3部分,一个是页面内容,一个是css样式,一个是JS文件 CSS和JS文件缓存 <link rel="stylesheet" type=" ...
- io.lettuce.core.protocol.ConnectionWatchdog - Reconnecting, last destination was ***
一.问题 redis起来后一直有重连的日志,如下图: 二.分析 参考lettuce-core的github上Issues解答https://github.com/lettuce-io/lettuce- ...
- Windows Mobile设备中心不能正常运行
1.开始-->运行,输入services.msc回车 2.在打开的服务界面中,找到“基于Windows Mobile 2003的连接设备” 3.打开的属性 ,找到登录项,登录身份选择“本地系统账 ...
- snort_inline
snort_inline Link http://snort-inline.sourceforge.net/oldhome.html What is snort_inline? snort_inl ...
- 流程控制-switch
2.switch语句 switch(表达式){ case 值 1://case相当于== 语句块1; break; case 值 2: 语句块2; break; ....... default: 语句 ...
- Django的结构
一.Django的结构 二.静态文件的配置 STATIC_URL = '/static/' # HTML中使用的静态文件夹前缀 STATICFILES_DIRS = [ os.path.join(BA ...
- 这个在Github有52100颗星星的项目,怎么还有人不知道鸭!
Ta是近两年Docker最为火热的开源项目之一.Docker 开启了容器时代,而Ta则革新了我们对于云计算,软件开发流程,业务平台等等方面的认知. Ta就是Kubernetes,/k(j)uːbəˈn ...
- spark 实现多文件输出
需求 不同的key输出到不同的文件 txt文件 multiple.txt 中国;22 美国;4342 中国;123 日本;44 日本;6 美国;55 美国;43765 日本;786 日本;55 sca ...
- unity和lua开发游戏常备技能
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 我的个人博客 一.使用制作滑动列表:使用UILayout做虚拟列表 ui.list = base:findcom(" ...
- python中json序列化时汉字变成编码的解决方式
我们在使用json模块时,如果被序列化对象中不包含汉字,当然没有任何问题,但是有汉字会被编译成unicode码: import json dic = {","sex":& ...