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]\) ...
随机推荐
- CF1051F The Shortest Statement 题解
题目 You are given a weighed undirected connected graph, consisting of n vertices and m edges. You sho ...
- 二、kafka 中央控制器、主题、分区、副本
集群和中央控制器 一个独立的Kafka服务器被称为broker.broker用来接收来自生产者的消息,为消息设置偏移量,并把消息保存到磁盘.换句话说,多个kafka实例组成kafka集群,每个实例(s ...
- python 爬虫:HTTP ERROR 406
解决方法: 设置了Accept头后解决了,但是还是不知道原因 headers:{ Accept:"text/html, application/xhtml+xml, */*" }原 ...
- Mysql 实例:mysql语句练习50题(普通sql写法)
为了练习sql语句,在网上找了一些题,自己做了一遍,收益颇多.很多地方换一种思路,有更好的写法,欢迎指正. 题目地址:https://blog.csdn.net/fashion2014/article ...
- redis(二):Redis 命令
Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 语法 Redis 客 ...
- Python面向对象04 /封装、多态、鸭子类型、类的约束、super
Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...
- 一张PDF了解JDK10 GC调优秘籍-附PDF下载
目录 简介 Java参数类型 Large Pages JIT调优 总结 简介 今天我们讲讲JDK10中的JVM GC调优参数,JDK10中JVM的参数总共有1957个,其中正式的参数有658个. 其实 ...
- bzoj2056gift? 高精度?*
bzoj2056gift? 高精度? 题意: 给出abcdefghi,求2^a+2^b+2^c+2^d+2^e+2^f+2^g+2^h+i.a~h≤60,i≤2^63 题解: 发现只有极限数据才会爆u ...
- corosync+pacemaker高可用集群
高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术.简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点. ...
- 时间序列知识图谱-《利用Python进行数据分析》
所有内容整理自<利用Python进行数据分析>,使用MindMaster Pro 7.3制作,emmx格式,源文件已经上传Github,需要的同学转左上角自行下载或者右击保存图片. 其他章 ...