luogu 6046 纯粹容器 期望dp
LINK:纯粹容器
一道比较不错的期望题目。
关键找到计算答案的方法。
容易发现对于每个点单独计算答案会好处理一点。
暴力枚举在第k轮结束统计情况 然后最后除以总方案数即可。
考虑在第k轮的时候结束 我们要求出其所有的方案。
首先一个点在第k轮结束必须要有一个点在第k轮和它相遇。
如果暴力枚举这个点的话可能有不合法的方案 也不太容易进行计算。
容易发现击败某个点的点在左边或者右边 分别设为l,r.
考虑最后一定是 i~l或者i~r这段点都没了。
如果l/r被击败了 也不影响解决 所以我们只关心i~l或者i~r这两端所造成的方案数。
考虑如果是被左边击败了 设为calc(i-l,j).含义表示这i-l轮在前j轮中出现了。
仔细分析这个东西的含义 其实i可能在前j轮中的任意一轮都出现了 但是此时我们强制其在第j轮出现 那么减掉出现在1~j-1轮的方案数即可。
考虑calc(i-l,j)怎么计算:我的计算方法是 C(j,i-l)fac[i]C(n-1-i,j-i)fac[j-i]fac[n-1-j].
值得一提的是 如果同时可以被两边击败那么方案为 calc(i-l,j)+calc(r-i,j)不难发现有重复的地方发生。
即此时已经被左边击败了可是计算的确是右边的方案数反之同理 所以要减掉两边被同时击败的方案数C(r-l,j).
const ll MAXN=300010,G=3;
ll n;
ll fac[MAXN],inv[MAXN],a[MAXN],w[MAXN];
inline ll ksm(ll b,ll p)
{
ll cnt=1;
while(p)
{
if(p&1)cnt=(ll)cnt*b%mod;
b=(ll)b*b%mod;
p=p>>1;
}
return cnt;
}
inline ll C(ll a,ll b){if(a<b)return 0;return fac[a]*inv[b]%mod*inv[a-b]%mod;}
inline ll calc(ll i,ll j){if(j<i)return 0;return C(j,i)*C(n-1-i,j-i)%mod*fac[i]%mod*fac[j-i]%mod;}
signed main()
{
freopen("1.in","r",stdin);
get(n);fac[0]=1;
rep(1,n,i)get(a[i]),fac[i]=fac[i-1]*i%mod;
inv[n]=ksm(fac[n],mod-2);
fep(n-1,0,i)inv[i]=inv[i+1]*(i+1)%mod;
//cout<<calc(1,2)<<endl;
rep(1,n,i)
{
ll l=0,r=0,ans=0;
fep(i-1,1,j)if(a[j]>a[i]){l=j;break;}
rep(i+1,n,j)if(a[j]>a[i]){r=j;break;}
if(!l&&!r){printf("%d ",n-1);continue;}
int las=0;
rep(1,n-1,j)
{
if(!l)
{
ans=(ans+((calc(r-i,j)*fac[n-1-j])-las)%mod*(j-1))%mod;
las=(calc(r-i,j)*fac[n-1-j])%mod;
//putl(calc(r-i,j));//putl(calc(r-i,j-1));
}
if(!r)
{
ans=(ans+(calc(i-l,j)*fac[n-1-j]-las)%mod*(j-1))%mod;
las=calc(i-l,j)*fac[n-1-j]%mod;
}
if(l&&r)
{
ans=(ans+((calc(i-l,j)+calc(r-i,j)-calc(r-l,j))*fac[n-1-j]-las)%mod*(j-1))%mod;
las=((calc(i-l,j)+calc(r-i,j)-calc(r-l,j))*fac[n-1-j])%mod;
}
}
ans=ans*inv[n-1]%mod;
printf("%lld ",(ans+mod)%mod);
}
return 0;
}
luogu 6046 纯粹容器 期望dp的更多相关文章
- Luogu P3251 [JLOI2012]时间流逝 期望dp
题面 题面 题解 期望\(dp\)好题! 今年\(ZJOI\)有讲过这题... 首先因为\(T\)只有\(50\),大力\(dfs\)后发现,可能的状态数最多只有\(20w\)左右,所以我们就可以大力 ...
- Luogu P1850 换教室(期望dp)
P1850 换教室 题意 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1\l ...
- luogu P4321 随机漫游 期望dp 二进制 高斯消元
LINK:随机漫游 非常妙的一道题. 容易想到倒推期望. 设状态 f[i][j]表示到达第i个点 此时已经到达的集合为j能走到全集的期望边数. 只要求出来这个就能O(1)回答询问. \(f[i][j] ...
- 【Luogu】P2473奖励关(期望DP)
题目链接 逆推期望DP.设f[i][j]为1~i-1中吃到的宝物集合为j,在i~k轮能得到的最大期望分数. 如果不吃显然f[i][j]+=f[i+1][j]/n 如果吃就是f[i][j]+=max(f ...
- LUOGU P1291 [SHOI2002]百事世界杯之旅 (期望dp)
传送门 解题思路 期望$dp$.因为这个是期望步数,所以要倒着推.那么这道题就变得一脸可做了,设$f[i]$表示还有$i$张牌没有收集的期望,那么考虑再抽一张,有$(n-i)/n$的概率抽到抽过的牌, ...
- luogu P3830 [SHOI2012]随机树 期望 dp
LINK:随机树 非常经典的期望dp. 考虑第一问:设f[i]表示前i个叶子节点的期望平均深度. 因为期望具有线性性 所以可以由每个叶子节点的期望平均深度得到总体的. \(f[i]=(f[i-1]\c ...
- Luogu P1850 [NOIp2016提高组]换教室 | 期望dp
题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...
- 概率和期望dp
概率和期望dp 概率和期望好神啊,完全不会. 网上说概率要顺着推,期望要逆着推,然而我目前做的概率期望题正好都与此相反2333 概率: 关于概率:他非常健康 初中概率题非常恐怖.现在来思考一道题: ...
- 期望$DP$ 方法总结
期望\(DP\) 方法总结 这个题目太大了,变化也层出不穷,这里只是我的一点心得,不定期更新! 1. 递推式问题 对于无穷进行的操作期望步数问题,一般可用递推式解决. 对于一个问题\(ans[x]\) ...
随机推荐
- 在具体的前端工作中通常HTML页面乱码怎么解决?
HTML文件乱码一般是因为编码格式不匹配造成的,比如:不同编码内容混杂.浏览器不能自动检测网页编码等等:但无论是哪种情况造成乱码,在HTML文件头中设置网页编码,匹配好编码格式就可. 下面是一个中文乱 ...
- (四)ELK Logstash filter
filter 官方详解 https://www.elastic.co/guide/en/logstash/current/filter-plugins.html apache 日志实例: in ...
- Python预测2020高考分数和录取情况可能是这样
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:打磨虾 “迟到”了一个月的高考终于要来了. 正好我得到了一份山东新高 ...
- Windows下生成IOS证书并发布APP安装到IPhone
目录: 一:生成证书 二:安装到IPhone 准备环境: 1.Appuploader(需要安装Java环境) 2.爱思助手 一.生成证书 1.1.打开appuploader后登陆开发者账号 1.2.点 ...
- 数据可视化之DAX篇(四) 熟练使用EARLIER函数,轻松获取当前行信息
https://zhuanlan.zhihu.com/p/64400583 前面利用PowerBI做数据分析的时候都是对整列的字段进行操作,并没有做更细化的分析,比如分析数据的每一行.提取某一行的数据 ...
- 数据可视化之PowerQuery篇(二)这个方法帮你快速计算列
https://zhuanlan.zhihu.com/p/81846862 PowerQuery中,对两列或者多列的计算一般通过添加自定义列来实现,以下表为例, 如果需要1月和2月数据的合计,可以添加 ...
- 集训 T1-找试场
大致题意: 按照给定的指令移动,输出最后到达的点. 若没有走动过则输出(0,0). 基本思路 这题就是模拟,主要是判断指令的时候不太好判断, 先用字符串把指令读取进来,看看第一位是否是数字(如果是数字 ...
- FileNotFoundError: [WinError 2] 系统找不到指定的文件。 解决方案
用Idle运行Python脚本的时候发现如下错误: Traceback (most recent call last): File "C:\Users\DangKai\Desktop\pyt ...
- 地图热点 jquery.image-maps.js 的使用
在我悠闲了几天之后,我们后端给了我个任务,地图热点问题.简单来说,就是后台划出热点区域,设置链接,前端拿到数据渲染页面,显示热点区域.我主要使用了jquery.image-maps.js,并且添加了一 ...
- vue组件库用markdown生成文档
前言: 开发vue组件库需要提供组件的使用文档,最好是有渲染到浏览器的demo实例,既能操作又能查看源代码.markdown作为常用的文档编写载体,如果能在里面直接写vue组件,同时编写使用说明就再好 ...