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的更多相关文章

  1. 各种trick和细节错误汇总

    这篇博客主要是用来记自己写代码的时候犯的各种小技巧和低级失误,好提醒自己,从而尽量缩短debug时间. 点分治 1.求每一个子树到重心的距离的函数接口应该是dfs2(v, eg, e[i].w)而不是 ...

  2. 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 ...

  3. 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 ...

  4. 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 ...

  5. ACM The Famous Clock

    The Famous Clock 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 Mr. B, Mr. G and Mr. M are now in Warsaw, ...

  6. hdu 4255 A Famous Grid

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4255 A Famous Grid Description Mr. B has recently dis ...

  7. 07-语言入门-07-A Famous Music Composer

    题目地址: http://blog.csdn.net/sevenmit/article/details/8231994  描述 Mr. B is a famous music composer. On ...

  8. 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 ...

  9. HDOJ 4252 A Famous City 单调栈

    单调栈: 维护一个单调栈 A Famous City Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

随机推荐

  1. 网易自动化测试工具(airtest)的环境部署

    airtest 环境配置: 1.安装Python2.7 及 Python3.6 版本(2个需要都安装) 2.配置python环境变量(AirtestIDE 需要在python2.x的环境下运行,所以尽 ...

  2. java使用poi操作word, 支持动态的行(一个占位符插入多条)和表格中动态行, 支持图片

    依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifa ...

  3. X86驱动:恢复SSDT内核钩子

    SSDT 中文名称为系统服务描述符表,该表的作用是将Ring3应用层与Ring0内核层,两者的API函数连接起来,起到承上启下的作用,SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用 ...

  4. Java安装和环境配置

    Java安装和环境配置 从事Java开发第一关就是安装JAVA环境. 我们要安装JDK, 全称Java开发全套. 其中包含了JRE(运行时环境), 如果你打游戏的时候可能会提示你缺少JRE. 我们要做 ...

  5. 记一次关闭Hadoop时no namenode to stop异常

    记一次关闭Hadoop时no namenode to stop异常 ​ 在自己的虚拟机环境上跑着hadoop集群,一直正常运行着,不用的时候直接挂起虚拟机,今天需要做些调整,但是发现集群突然无法正常关 ...

  6. swift 有哪些学习资源

    Swift有哪些优秀的学习资源呢? 首先要推荐的当然是官方的资料了. 这个地址里放的是苹果官方为开发者提供的Swfit学习资源:https://developer.apple.com/swift/re ...

  7. c# 克隆来创建对象副本

  8. django内置缓存

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...

  9. thefuck安装和使用(ubuntu)

    系统环境(已测试可用): ubuntu 18.04 lts (server或desktop),ubuntu 19.04(server或desktop) sudo apt update sudo apt ...

  10. 前端学习笔记--CSS样式--背景和超链接

    1.背景 2.超链接: 举例: