Description

Tweetuzki 有一个袋子,袋子中有 \(N\) 个无差别的球。Tweetuzki 每次随机取出一个球后放回。求取遍所有球的期望次数。

取遍是指,袋子中所有球都被取出来过至少一次。

Input

一行一个整数 \(N\)

Output

一行一个整数,表示期望次数对 \(200403013\) 取模的结果

Hint

\(1~\leq~N~\leq~10^7\)

Solution

期望嘛,就是你xjb乱推好几个看起来很靠谱事实上最多有一个是对的甚至可能一个也不对的式子,然后用蒙特卡洛方法拍一拍,挑一个最靠谱的交上去

感谢@_rqy提供指导

先给出结论:

\[E(n)~=~n~\times~(\sum_{i=1}^{n}~\frac{1}{i})
\]

证明如下:

引理:对于一次试验,有 \(p~(0~\leq~p~\leq~1)\) 的概率成功,有 \(1-p\) 的概率不成功,如果一次试验后不成功则重复进行试验,否则停止。则期望在 \(\frac{1}{p}\) 步后停止试验

证明:

设期望 \(x\) 步后停止试验,根据已知以及期望的线性相加性,可得方程:

\[x~=~1~+~p~\times~0~+~(1~-~p)~\times~x
\]

上述方程的直观解释是当前进行完一步后有 \(p\) 的概率再进行 \(0\) 次(停止),\(1~-~p\) 的概率继续进行,由于下次试验和这次试验完全相同,所以有 \(1~-~p\) 的概率期望再进行 \(x\) 次。

解方程,得

\[x~=~\frac{1}{p}
\]

引理证毕。

于是考虑摸球,首先有 \(n\) 个球没有被摸到的时候,摸一次摸到新球的概率为 \(1\),根据引理,期望摸 \(1\) 次。

然后剩下 \(n~-~1\) 个球没有被摸到,摸一次摸到新球的概率为 \(\frac{n-1}{n}\),根据引理,期望摸 \(\frac{n}{n-1}\) 次。

然后剩下 \(n~-~2\) 个球没有摸到,摸一次摸到新球的概率为 \(\frac{n-2}{n}\) ,根据引理,期望摸 \(\frac{n}{n-2}\) 次。

……(一位读者及时砸坏了复读机,停止了复读)

按照球的个数进行数学归纳,根据期望的可加性(非线性相加性),可以得到摸遍 \(n\) 个球的期望

\[E(n)~=~n~+~\frac{n}{n-1}~+~\frac{n}{n-1}~+~\dots~+~\frac{n}{1}
\]

提取公因数 \(n\),可得

\[E(n)~=~n~\times~(\sum_{i=1}^{n}~\frac{1}{i})
\]

证毕。

然鹅最后一个式子只是为了让结论变得优美一点,事实上用倒数第二个式子就可以做题了233

于是先筛一遍逆元,然后求答案即可。

Code

#include <cstdio>
#ifdef ONLINE_JUDGE
#define freopen(a, b, c)
#endif
#define rg register
#define ci const int
#define cl const long long typedef long long int ll; namespace IPT {
const int L = 1000000;
char buf[L], *front=buf, *end=buf;
char GetChar() {
if (front == end) {
end = buf + fread(front = buf, 1, L, stdin);
if (front == end) return -1;
}
return *(front++);
}
} template <typename T>
inline void qr(T &x) {
rg char ch = IPT::GetChar(), lst = ' ';
while ((ch > '9') || (ch < '0')) lst = ch, ch=IPT::GetChar();
while ((ch >= '0') && (ch <= '9')) x = (x << 1) + (x << 3) + (ch ^ 48), ch = IPT::GetChar();
if (lst == '-') x = -x;
} template <typename T>
inline void ReadDb(T &x) {
rg char ch = IPT::GetChar(), lst = ' ';
while ((ch > '9') || (ch < '0')) lst = ch, ch = IPT::GetChar();
while ((ch >= '0') && (ch <= '9')) x = x * 10 + (ch ^ 48), ch = IPT::GetChar();
if (ch == '.') {
ch = IPT::GetChar();
double base = 1;
while ((ch >= '0') && (ch <= '9')) x += (ch ^ 48) * ((base *= 0.1)), ch = IPT::GetChar();
}
if (lst == '-') x = -x;
} namespace OPT {
char buf[120];
} template <typename T>
inline void qw(T x, const char aft, const bool pt) {
if (x < 0) {x = -x, putchar('-');}
rg int top=0;
do {OPT::buf[++top] = x % 10 + '0';} while (x /= 10);
while (top) putchar(OPT::buf[top--]);
if (pt) putchar(aft);
} const int maxn = 10000010;
const int MOD = 20040313; int n, ans;
int inv[maxn]; void GetInv(); int main() {
freopen("1.in", "r", stdin);
qr(n);
GetInv();
for (rg int i = 0; i < n; ++i) {
ans = (ans + 1ll * n * inv[n - i]) % MOD;
}
qw(ans, '\n', true);
} void GetInv() {
inv[1] = 1;
for(int i = 2; i <= n; ++i) inv[i] = 1ll * (MOD - MOD / i) * inv[MOD % i] % MOD;
}

Summary

对于一次试验,有 \(p~(0~\leq~p~\leq~1)\) 的概率成功,有 \(1-p\) 的概率不成功,如果一次试验后不成功则重复进行试验,否则停止。则期望在 \(\frac{1}{p}\) 步后停止试验

【期望】【P5081】Tweetuzki 爱取球的更多相关文章

  1. [洛谷P5081]Tweetuzki 爱取球

    题目大意:有$n$个球,每一次取一个球然后放回,问期望多少次取遍所有球 题解:令$f_i$表示已经取了$i$种球,还要取的次数的期望.$f_i=\dfrac in(f_i+1)+\dfrac{n-i} ...

  2. THUSC2019 退役记

    Day -inf 这一个半月潜心搞文化课,把文化课的坑填上了不少,我文化课的底子真是薄啊 一年前没想过我还挺有希望进队的,最后还差点冲上 一年后说不定会发现我搞文化课也能搞得不错呢? 一切都是未知 t ...

  3. [BZOJ4204] 取球游戏(期望)

    DarkBZOJ4204 (题面来源) [题目描述] 有\(m\)个球,一开始每个球均有一个初始标号,标号范围为\(1-n\)且为整数,标号为\(i\)的球有\(a_{i}\)个,并保证\(Σa_{i ...

  4. [学习笔记]概率&期望

    概率的性质 非负性:对于每一个事件$A,0\;\leq\;P(A)\;\leq\;1$. 规范性:对于必然事件$S,P(S)=1$;对于不可能事件$A,P(A)=0$. 容斥性:对于任意两个事件$A, ...

  5. HDU 5810 Balls and Boxes(盒子与球)

     Balls and Boxes(盒子与球) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  6. lightoj 1408 Batting Practice (概率问题,求期望,推公式)

    题意:一个人若连续进k1个球或连续不进k2个球,游戏结束,给出这个人不进球的概率p(注意:是不进球!!!),求到游戏结束时这个投球个数的期望. 不进球概率为p,进概率 q=1-p.设 f[i] 表示连 ...

  7. Tsinsen-A1489 抽奖 【数学期望】

    乔明达太神,其实已经题解非常清楚了,我再推一遍吧. 题目意思相当于有n个盒子,无差别投m次球,每个盒子的得分为每个盒子里的球的个数. 第一问: 假设这个球放在了第i个盒子里,那么 ∆ans = (mi ...

  8. TsinsenA1489 抽奖 【期望】

    题目分析: 问题可以转化成将m个球放进n个盒子里,每个盒子的贡献为盒子中球数的平方. 第一问考虑增量. 对于一个原本有$x$个球的盒子,新加一个球的贡献是$2x+1$.期望条件下仍然满足. 第$i$个 ...

  9. BZOJ2554 color 【概率DP】【期望DP】

    题目分析: 好题. 一开始看错题了,以为是随机选两个球,编号在前的染编号在后的. 但这样仍然能获得一些启发,不难想到可以确定一个颜色,剩下的颜色是什么就无关了. 那么答案就是每种颜色的概率乘以期望.概 ...

随机推荐

  1. 【Jmeter测试】如何使用BeanShell断言判断请求返回的Json相应结果

      脚本结构​上图中,queryMaterialApiDTOListByPkIds是返回Json格式响应结果的请求,然后添加BeanShell断言详细判断Json结果中的值是否正确. Json格式的相 ...

  2. HP VC模块Shared uplink Sets配置参考

    首先配置MAC地址的分配方式 在左侧导航栏中,点解"MAC Addresses" 选择VC分配MAC地址,并且选择一个合适的地址段,点击"Apply"继续 在弹 ...

  3. 网易客户端授权密码,errormsg='authentication failed (method LOGIN)' exitcode=EX_NOPERM

    zabbix群里一网友在安装msmtp+mutt测试发送邮件失败 配置文件如下: /usr/local/msmtp/etc/msmtprc account default host smtp..com ...

  4. 【转】SWFUpload 官方说明文档(2.5.0版)

    原文出自:http://www.runoob.com/w3cnote/swfupload-document.html SWFUpload使用指南请查阅:http://www.w3cschool.cc/ ...

  5. AOP:静态代理实现方式①通过继承②通过接口

    文件结构: 添加日志: package com.wangcf.manager; public class LogManager { public void add(){ System.out.prin ...

  6. c++第三次作业

    GitHub地址 https://github.com/ronghuijun/3Elevators-scheduling 实现过程 一开始打算分成三个类来写的 因为想到电梯的功能不太一样 一个只能上1 ...

  7. 18软工实践-第八次作业(课堂实战)-项目UML设计(团队)

    目录 团队信息 分工选择 课上分工 课下分工 ToDolist alpha版本要做的事情 燃尽图 UML 用例图 状态图 活动图 类图 部署图 实例图 对象图 时序图 包图 通信图 贡献分评定 课上贡 ...

  8. Spring1()

    目的: 降低Java开发的复杂性 使用策略: 基于POJO的轻量级和最小侵入式的编程 通过依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模版减少样式代码 依赖注入:由Sprin ...

  9. 实现Spring管理struts的Action

    struts2和spring的整合,关键点在于struts2中的action要纳入spring容器的管理中成为一个bean.  可以在struts2中配置:  <struts>      ...

  10. Alpha阶段事后诸葛亮分析

    事后诸葛亮分析 一.设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件可供各类人群闲暇时间消遣娱乐,锻炼脑力. 定义的很清楚,就是一个定位 ...