两道类似的概率期望题目
前几周的模拟赛才遇到过类似的套路,现在在 AT 上遇到又不会了……于是都记录一下。
其实写完之后还是感觉不太能熟练运用……,可能需要多做题做理解。
【XSY4214】quq
题面:http://192.168.102.138/JudgeOnline/problem.php?cid=1818&pid=2
题解:
设 m=maxaim=\max a_im=maxai,即编号最大的可能被扭到的蛋。
首先先将扭蛋机按 aia_iai 从小到大排序。先考虑最优策略是什么,设 bib_ibi 表示 ≥i\geq i≥i 的最小的 aaa 值,那么假设现在还未扭到的蛋的集合是 SSS,其中编号最大的是 maxidmaxidmaxid,那么我们选的扭蛋机大小肯定是 bmaxidb_{maxid}bmaxid。感性理解就是扭编号大的扭蛋时也有可能扭到编号小的扭蛋,而扭编号小的扭蛋时不可能扭到编号大的扭蛋,所以如果先扭编号小的扭蛋再扭编号大的扭蛋,就会在扭编号大的扭蛋时浪费更多的期望次数,所以我们要选能扭到所有扭蛋且 aaa 值最小的扭蛋机。
由于扭哪个扭蛋机是由 maxidmaxidmaxid 决定的,所以我们枚举每个扭蛋 xxx,计算出它作为 maxidmaxidmaxid 出现出现的概率以及它作为 maxidmaxidmaxid 出现时,使得 maxidmaxidmaxid 改变(即扭到它)的期望扭蛋次数。
期望扭蛋次数即为 bxb_{x}bx,现在关键问题是求出 xxx 作为 maxidmaxidmaxid 出现的概率,即操作完 x+1∼mx+1\sim mx+1∼m 时还没有扭到 xxx 的概率。
对于任意一个时刻,当前还未扭到的蛋的集合为 SSS,那么对于所有 i∈Si\in Si∈S,下一个扭到的未出现过的蛋为 iii 的概率都是相同的。也就是说如果我们只看每一个蛋第一次被扭出的时间的顺序,那么每一种顺序(1∼m1\sim m1∼m 的每一种排列)的出现概率都是相同的。
那么操作完 x+1∼mx+1\sim mx+1∼m 时还没有扭到 xxx 的概率,就相当于在这个 1∼m1\sim m1∼m 的排列中 xxx 出现位置比 x+1∼mx+1\sim mx+1∼m 都要靠后的概率,即为 1m−x+1\frac{1}{m-x+1}m−x+11。
【ARC114E】Paper Cutting 2
题意:你有一张大小为 H×WH\times WH×W 的长方形纸,被划分为 H×WH\times WH×W 个格子,其中有恰好两个格子是黑色的,其余都是白色的。你需要进行如下操作:
- 假设你当前还剩下一张大小为 h×wh\times wh×w 的纸,那么这张纸被 h−1h-1h−1 条横线和 w−1w-1w−1 条竖线划分为 h×wh\times wh×w 个格子,你将在这 h+w−2h+w-2h+w−2 条线中随机选择一条,并沿着这一条线将整张纸剪开剪成两张纸,然后:
- 如果两个黑色格子仍然在同一张纸上,则扔掉另一张纸,重复执行上述操作。
- 否则结束操作。
求期望进行的操作次数,对 998244353998244353998244353 取模。
H,W≤105H,W\leq 10^5H,W≤105。
题解:
先讲一维的情况。假设纸条长度为 nnn(有 nnn 个格子),两个黑格子分别是 x,yx,yx,y(x<yx<yx<y)。
第一想法是 O(n3)O(n^3)O(n3) 的 DP(记录两个黑格子两边剩余的格子数),但貌似不太能做,因为状态数已经是 O(n2)O(n^2)O(n2) 的了。
难点在于这个概率可能比较难处理,毕竟纸条剩余长度不同概率就不同。
一个非常高妙的转化是:题目等价于,我们随机一个 1∼n−11\sim n-11∼n−1 的排列,并按随机出的排列顺序切纸条,切的过程中只有合法才计数(不合法的情况有:当前切线所在纸条已经和黑格子分离了、两个黑格子之前就已经被切开了等),求切的次数的期望。
证明是不难的,假设已经切到了某种状态(确定了排列的前若干位),对于下一步可能的每种合法的切法,它们成为下一步(在后面的排列中作为第一个合法的切法出现)的概率是相等的。
现在我们只需要统计切的次数的期望即可。
这是简单的,枚举切第 iii 条线的贡献,合法的条件是:iii 到黑格子之间、黑格子与黑格子之间没有线被切过。假设需要某 kkk 条线不被切过,那么第 iii 条线的贡献就是 1k+1\frac{1}{k+1}k+11。
这个转化大概思路就是:考虑把不合法的操作也加入操作序列内填充成一个排列,使得每种操作序列出现的概率不变(基数增大但概率不变),而对排列来说概率是好求的。
二维的情况也是类似的,事实上貌似可以扩展到 nnn 维?
#include<bits/stdc++.h>using namespace std;namespace modular
{const int mod=998244353;inline int add(int x,int y){return x+y>=mod?x+y-mod:x+y;}inline int dec(int x,int y){return x-y<0?x-y+mod:x-y;}inline int mul(int x,int y){return 1ll*x*y%mod;}
}using namespace modular;inline int poww(int a,int b)
{int ans=1;while(b){if(b&1) ans=mul(ans,a);a=mul(a,a);b>>=1;}return ans;
}inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^'0');ch=getchar();}return x*f;
}int H,W,h1,w1,h2,w2;int main()
{H=read(),W=read(),h1=read(),w1=read(),h2=read(),w2=read();if(h1>h2) swap(h1,h2);if(w1>w2) swap(w1,w2);int ans=0;for(int i=1;i<H;i++){int k;if(i<h1) k=h1-1-i+h2-h1;else if(i<h2) k=h2-h1-1;else k=i-h2+h2-h1;k+=w2-w1;ans=add(ans,poww(k+1,mod-2));}for(int i=1;i<W;i++){int k;if(i<w1) k=w1-1-i+w2-w1;else if(i<w2) k=w2-w1-1;else k=i-w2+w2-w1;k+=h2-h1;ans=add(ans,poww(k+1,mod-2));}printf("%d\n",ans);return 0;
}
两道类似的概率期望题目相关推荐
- 腾讯实习生面试2016两道面试题目?(知乎)
腾讯实习生面试2016两道面试题目?修改 谢谢大神们高质量的回答,满满干货,excited ------------------------------------------------------ ...
- 两道概率题-供大家周末把玩
两道概率题-供大家周末把玩 题目 1.给定一个函数rand5(),该函数能等概率生成1-5之间的整数(包括1和5),如何用该函数等概率生成整数1-7? 解法 本以为很简单,做了以后才发现其实并不简单, ...
- 概率论与数理统计【二】随机事件与概率(2) - 常用求概率公式与例题两道
本节为概率论与数理统计复习笔记的第二节,随机事件与概率(2),主要包括:加法公式.减法公式.条件概率公式.乘法公式.全概率公式.贝叶斯公式以及两道例题. 1.常用的求概率公式 1.加法公式 P(A∪B ...
- 2014年京东校招笔试中的两道java题目
两道都是选择题 1,调用下面的函数的返回是(C) public static int testt() {try {return 1:}catch(Exception e){return 2;}fina ...
- 两道例题详解贝叶斯定理
导读:本文首先讲解条件概率及贝叶斯定理,之后有两道例题,看看你都能答对吗? 作者:基思·斯坦诺维奇(Keith E. Stanovich).理查德·韦斯特(Richard F. West).玛吉·托普 ...
- 科林明伦杯哈理工第九届——分布式服务(概率期望+思维)
题目描述 小赵实习时负责的服务模块由多个实例共同组成,当出现一个请求时,反向代理会将请求随机的转发到一个实例上进行处理.由于网络波动等原因,请求可能出现超时的情况,这时候,客户端会进行重试,请求会再一 ...
- 概率期望题(期望 DP)做题记录
概率期望题(期望 DP)做题记录 P3830 [SHOI2012]随机树 难点在于第二问:生成树的期望深度. 不 wei zhuo 捏,设 \(dp_{i,j}\) 表示已经有了 \(i\) 个叶子结 ...
- 【loj6191】「美团 CodeM 复赛」配对游戏 概率期望dp
题目描述 n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈.问最终栈中元素个数的期望是多少. 输入 一行一个正整数 n . 输出 一行一个实数,表示期望剩下的人数, ...
- [NOIP2016]换教室(概率期望$DP$)
其实吧我老早就把这题切了--因为说实话,这道题确实不难啊--李云龙:比他娘的状压DP简单多了 今天我翻以前在Luogu上写的题解时,突然发现放错代码了,然后被一堆人\(hack\)--蓝瘦啊\(ORZ ...
最新文章
- 单机部署open-falcon 0.2
- attiny13a程序实例_ATtiny13A带A新版本
- Linux在任务栏上找不到最小化窗口的解决方法
- hibernate继承关系映射关系方法(二)--每个子类一张表
- 对比tensorflow查看打印输出张量Tensor的两种方法(急切执行tf.enable_eager_execution()和tf.Session.run())
- 如何在 SAP Spartacus 自定义 UI 里使用标准 UI 的上下文数据 - let 关键字的用法
- 可信计算3.0工程初步pdf_查校 | 英国大学工业工程与运筹学专业40个授课硕士+研究Mphil/Phd 项目汇总...
- 易宝典文章——玩转Office 365中的Exchange Online服务 之二十六 根据文本内容筛选群发邮件...
- hdfs和日志业务系统
- windows 2003 远程桌面无法使用剪贴板共享纯文本的解决方法(亲测可用)
- lucene-SpanNotQuery和SpanOrQuery交迭与全局跨度
- java中普通变量、静态变量、静态代码块初始化的顺序辨析
- php一行代码实现人脸识别,一行代码搞定人脸识别
- 首旅如家仍计划全年开店800-1000家;万豪旗下双品牌酒店“帆船”于宁夏银川启幕 | 美通企业日报...
- 获取阿里云docker加速器地址
- C# 实现Remoting双向通信
- js 将简体字转化成繁体字
- ip变更导致连接不到mysql的解决办法
- k2450 linux 显卡驱动,Debian系统安装NVIDIA驱动支持双显卡切换
- 面试中可以谎报薪资嘛?