也许更好的阅读体验

\(\mathcal{Description}\)

有 \(n\) 堆石子,依次编号为 \(1, 2,\ldots , n\),其中第 \(i\) 堆有 \(a_i\) 颗石子

你每次在仍然有石子的石子堆中等概率随机选择一堆石子,并取走其中一颗石子

求第 \(1\) 堆石子被取走的时间的期望

\(n\leq 5\times 10^5,a_i\leq 5\times 10^5\)

\(\mathcal{Solution}\)

这题其实也不难,然而也不是考虑\(DP\),和stone一样

问题要求的实际就是在第\(1\)堆石子被取完之前,总共有多少个石子被拿走了

显然\(a_1\)被拿完了,再考虑期望的线性性,由于你取走其他堆石子对当前堆没有影响,可以单独考虑每一堆石子被取了多少个

先考虑\(a_i\)没有全部被取完

假设第\(i\)堆石子被取走了\(x\left(0\leq x\leq a_i-1\right)\)颗石子,因为第\(i\)堆石子没被取完,而没有继续被取走肯定是因为第\(1\)堆石子被取完了

设\(1\)为从第一堆石子中取一颗石子,\(0\)为从第二堆石子中取一颗石子

那么方案数就是有\(a_1\)个\(1\)和\(x\)个\(0\)的长度为\(a_1+x\)的且最后一位是\(1\)的二进制串的个数

则有\(\begin{pmatrix}a_1+x-1 \\ x\end{pmatrix}\)种方案数,总方案数为\(2^{a_1+x}\),那么概率就是\(p_x=\frac{\begin{pmatrix}a_1+x-1\\ x\end{pmatrix}}{2^{a_1+x}}\)

若\(x=a_i\),这个看起来没原来那么好算了,想到这两种情况的概率加起来应该等于\(1\),所以这种情况的概率就是\(q=1-\sum\limits_{j=0}^{a_i-1}p_j\)

则我们得到\(E_i=\sum\limits_{j=0}^{a_i-1}j*p_j+qa_i\)

总期望就是\(E=\sum\limits_{i=2}^nE_i\),写复杂点就是

\(E=\left(\sum\limits_{i=2}^n\left(\sum\limits_{j=0}^{a_i-1}j*\frac{\begin{pmatrix}a_1+j-1 \\ j\end{pmatrix}}{2^{a_1+j}}\right)+a_i\left(1-\sum\limits_{j=0}^{a_i-1}\frac{\begin{pmatrix}a_1+j-1 \\ j\end{pmatrix}}{2^{a_1+j}}\right)\right)+a_1\)

这个东西怎么维护呢,直接考虑\(a_i\)变成\(a_i+1\)的情况,我们考虑里面那个\(\sum\)的变化,实际上只有枚举上界增大\(1\)变成了\(a_i\)我们直接对\(a_i\)的所有取值的答案都预处理出来就行了

\(\mathcal{Code}\)

/*******************************
Author:Morning_Glory
LANG:C++
Created Time:2019年11月08日 星期五 16时20分30秒
*******************************/
#include <cstdio>
#include <fstream>
using namespace std;
const int maxn = 1000006;
const int lim = 1000000;
const int h = 500000;
const int mod = 323232323;
//cin为我打的快读板子,详细内容可去看以前的代码,总是在这里写感觉有点影响阅读
int n,p,ans,a;
int fac[maxn],ifac[maxn],inv[maxn],mi[maxn],f[maxn],g[maxn];
int C (int n,int m){ return 1ll*fac[n]*ifac[n-m]%mod*ifac[m]%mod;}
int main()
{
fac[0]=ifac[0]=mi[0]=inv[1]=1;
for (int i=2;i<=lim;++i) inv[i]=(mod-1ll*mod/i*inv[mod%i]%mod);
for (int i=1;i<=lim;++i) fac[i]=1ll*fac[i-1]*i%mod,ifac[i]=1ll*ifac[i-1]*inv[i]%mod,mi[i]=1ll*mi[i-1]*inv[2]%mod; cin>>n>>a;
ans=a; //枚举上界为i
g[0]=mi[a];
for (int i=1;i<=h;++i){
int p=1ll*C(a+i-1,i)*mi[a+i]%mod;
f[i]=(f[i-1]+1ll*i*p%mod)%mod;
g[i]=(g[i-1]+p)%mod;
} //石子数为i的答案
for (int i=h;i>=1;--i) f[i]=(f[i-1]+1ll*i*(mod+1-g[i-1])%mod)%mod; for (int i=2;i<=n;++i) cin>>a,ans=(ans+f[a])%mod; printf("%d\n",ans);
return 0;
}

如有哪里讲得不是很明白或是有错误,欢迎指正

如您喜欢的话不妨点个赞收藏一下吧

stone2 [期望]的更多相关文章

  1. 【BZOJ-3143】游走 高斯消元 + 概率期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2264  Solved: 987[Submit][Status] ...

  2. bzoj1415[NOI2005]聪聪和可可-期望的线性性

    这道题之前我写过一个巨逗比的写法(传送门:http://www.cnblogs.com/liu-runda/p/6220381.html) 当时的原因是这道题可以抽象出和"绿豆蛙的归宿&qu ...

  3. hdu 4481 Time travel(高斯求期望)(转)

    (转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...

  4. 【BZOJ3036】绿豆蛙的归宿 概率与期望

    最水的概率期望,推荐算法合集之<浅析竞赛中一类数学期望问题的解决方法> #include <iostream> #include <cstdio> using na ...

  5. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  6. 【BZOJ-1426】收集邮票 概率与期望DP

    1426: 收集邮票 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 261  Solved: 209[Submit][Status][Discuss] ...

  7. 【BZOJ-1419】Red is good 概率期望DP

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

  8. [NOIP2016]换教室 D1 T3 Floyed+期望DP

    [NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...

  9. 关于在left join的on子句中限制左边表的取值时出现非期望的结果

    使用的SQL大概是这样的: select * from A left join B on A.id=B.id and A.id>10; --错误的使用 我们期望的结果集应该是 A中的id> ...

随机推荐

  1. nginx 访问控制之 location

    在生产环境中,我们会对某些特殊的请求进行限制,比如对网站的后台进行限制访问. 这就用到了location配置. 示例1: location /aming/ { deny all; } 说明:针对/am ...

  2. Xcode9/iOS 11 无线调试方法

    1.确保手机已经升级到 iOS 11 ,Xcode 已经升级到 9.0 版本,用手机连接电脑,打开 Xcode 选择路径如下图 2.勾选 Connect via network ,勾选之后拔掉手机. ...

  3. error: 'for' loop initial declaration used outside C99 mode的解决方法

    for(int i = 0;i<10;i++)这样写循环时可能会出现如题编译错误,解决方法有两种,如下:1 将文件后缀名由".c"改为".cpp"2 in ...

  4. 记一次cpu指标异常的跟踪排查

    问题描述: 最近在测试环境的服务器上,无意中发现cpu持续飙高.最高的时候达到了200%经过反复重启无效之后,决定挖掘深层次的原因 通过top命令打印出消耗cpu的pid,如图 通过ps -mp 24 ...

  5. 图上的并行处理 Parallel Processing of Graphs

    Graph 本次学术前沿讲座由邵斌老师主讲,标题已经揭示了主题:Graph.1.5h的talk,听完自觉意犹未尽.本来以为是一节自己没接触过的图形学的talk,没想到讲的很多内容都跟自己学过的很多东西 ...

  6. leetcode 494. 目标数

    题目描述: 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S.现在你有两个符号 + 和 -.对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面. 返回可以 ...

  7. border-radius实例2

    一.border-radius 最大值100% /* border-radius的最大值是100% */ .block { width: 100px; height: 100px; border: 1 ...

  8. PHP 命令行参数解析工具类

    <?php/** * 命令行参数解析工具类 * @author guolinchao * @email luoyecb@163.com */class CommandLine{ // store ...

  9. vue中axios使用二:axios以post,get,jsonp的方式请求后台数据

    本文为博主原创,转载请注明出处 axios在上一篇中讲过:vue中axios使用一:axios做拦截器,axios是请求后台资源的模块,用来请求后台资源. axios本身是支持get,post请求后台 ...

  10. Java学习-058-Jsoup爬虫获取中国所有的三级行政区划数据(三),处理二级编码缺失

    通过查看数据可知,直辖市或者某些三级行政区域没有对应的二级区域,为方便后续的地址使用,可自定义缺失的二级地址. 如下示例自定义的二级行政区域的名称为一级区域的名称,对应的源码如下所示: 将此段源码添加 ...