【NOI2019】斗主地【期望】【组合数学】【下降幂】【插值】

题意:

nnn张牌,从上往下的第iii张牌权值是f(i)=itypef(i)=i^{type}f(i)=itype

进行mmm次洗牌操作,每次操作给定aia_iai,将从上往下的前aia_iai张牌分成一堆,后面bib_ibi张牌分成第二堆。如果两堆的牌数分别为X,YX,YX,Y,则有XX+Y\frac{X}{X+Y}X+YX的概率将第一堆的最下面一张牌放在第三堆的最上面,否则将第二堆的最下面放到第三堆的最上面,直到两边都没有牌,第三堆为最终结果。

最后qqq次询问从上往下第cic_ici张牌的期望权值 模 998244353998244353998244353

n≤107,m,q≤5×105,type∈{1,2}n\leq 10^7,m,q\leq5\times 10^5,type\in\{1,2\}n107,m,q5×105,type{1,2}

题本身不错,但结论太好猜,而且要证明必须要先猜出来,出在NOI还是比较失败的

结论1kkk次洗牌可以看成把第k−1k-1k1次洗牌后每张牌的期望看成权值洗牌

根据期望的线性性应该很容易理解。

式子证明:

设第k−1k-1k1次洗牌后第iii张牌是原来的第jjj张牌的概率是P(i,j)P(i,j)P(i,j)
kkk次洗牌后第iii张牌对应第k−1k-1k1次的第jjj张牌的概率为P′(i,j)P'(i,j)P(i,j)
那么第kkk次后对应原来的编号是
P′′(i,j)=∑k=1nP′(i,k)P(k,j)P''(i,j)=\sum_{k=1}^nP'(i,k)P(k,j)P(i,j)=k=1nP(i,k)P(k,j)
k−1k-1k1次后第iii张牌的期望是
E(i)=∑j=1nP(i,j)F(j)E(i)=\sum_{j=1}^nP(i,j)F(j)E(i)=j=1nP(i,j)F(j)
把它看成权值洗第kkk
E′(i)=∑j=1nP′(i,j)E(j)=∑j=1nP′(i,j∑k=1nP(j,k)f(k)=∑j=1n∑k=1nP′(i,k)P(k,j)f(j)=∑j=1nP′′(i,j)f(j)E'(i)=\sum_{j=1}^nP'(i,j)E(j)\\ =\sum_{j=1}^nP'(i,j\sum_{k=1}^nP(j,k)f(k)\\=\sum_{j=1}^n\sum_{k=1}^nP'(i,k) P(k,j)f(j)\\=\sum_{j=1}^nP''(i,j)f(j)E(i)=j=1nP(i,j)E(j)=j=1nP(i,jk=1nP(j,k)f(k)=j=1nk=1nP(i,k)P(k,j)f(j)=j=1nP(i,j)f(j)

结论2 题目中洗牌的方式相当于(nai)\binom n {a_i}(ain)种方案等概率随机选择一种。

即:这(nai)\binom n {a_i}(ain)种方案出现的概率都相等

考虑一个长度为nnn 、有aia_iai000010101序列sss000表示取第一堆,111表示取第二堆,它和最终洗牌后的牌堆情况一一对应,每个位置选择的概率只和它后缀中000111的数量有关。

考虑交换两个相邻的000111,设它们的下标是iiii+1i+1i+1,不妨设si=0,si+1=1s_i=0,s_{i+1}=1si=0,si+1=1

1∼i−11\sim i-11i1i+2∼ni+2\sim ni+2n的位置后缀010101数量都没有变化,贡献的概率都是一样的。

i+2∼ni+2\sim ni+2n中有xxx000yyy111

交换前这两位的概率是 x+1x+y⋅y+1x+y−1\frac{x+1}{x+y}\cdot\frac{y+1}{x+y-1}x+yx+1x+y1y+1

交换后的概率是y+1x+y⋅x+1x+y−1\frac{y+1}{x+y}\cdot\frac{x+1}{x+y-1}x+yy+1x+y1x+1

所以交换后的概率都是相等的

进而得到所有情况的概率都相等

Q: 按这种思路,为什么按12\frac{1}{2}21的概率选一堆就不是均匀随机了呢?

A: 如果可以完全保证12\frac 1221的概率,那么也是均匀随机的。但问题出在一堆选完之后,就只能选剩下的一堆,概率实际上不是12\frac 1221,导致最终结果不均匀。而本题中选完之后概率就是000,并没有特殊情况。

结论3 无论洗多少次牌,牌堆中第iii张牌的期望权值都是关于iii的不超过typetypetype次的多项式。

采用归纳法,假设第m−1m-1m1次后是个typetypetype次的多项式,需要证明再洗一次仍然是typetypetype次多项式。

设在m−1m-1m1次后第iii张牌的期望是E(i)E(i)E(i)mmm次后是E′(i)E'(i)E(i)。我们尝试用EEE来表示出E′(i)E'(i)E(i),即计算出概率P′(i,j)P'(i,j)P(i,j)

因为是等概率随机的,计算概率就等价于计算方案数。记 am=Aa_m=Aam=A,以下的推导中均省略分母中的(nA)\binom nA(An)

不妨设j≤amj\leq a_mjam,即只考虑分到第一堆的牌的贡献,分到第二堆是同理的

我们要让jjj落到iii的位置上,那么在iii前面选择的第一堆的牌需要恰好j−1j-1j1张,iii后面通过组合数算出贡献的方案

P′(i,j)=(i−1j−1)(n−iA−j)P'(i,j)=\binom{i-1}{j-1}\binom{n-i}{A-j}P(i,j)=(j1i1)(Ajni)

那么可以得到

E′(i)=∑j=1A(i−1j−1)(n−iA−j)E(j)E'(i)=\sum_{j=1}^A\binom{i-1}{j-1}\binom{n-i}{A-j}E(j)E(i)=j=1A(j1i1)(Ajni)E(j)

你把两个组合数拆一下,发现完全没有像常数的意思,不说typetypetype次了,都有点怀疑是不是多项式。

但还有个重要的性质没用:E(j)E(j)E(j)本身也是typetypetype次的多项式

当然前面一堆组合数,带几个单项式进去显然没有任何作用。

但看到多项式又有组合数,你想到了什么?阶乘幂啊!

E(j)E(j)E(j)转成下降幂多项式,然后考虑每个下降幂单项式jk‾(k≤type)j^{\underline k}(k\leq type)jk(ktype)的贡献

∑j=1A(i−1j−1)(n−iA−j)jk‾\sum_{j=1}^A\binom{i-1}{j-1}\binom{n-i}{A-j}j^{\underline k}j=1A(j1i1)(Ajni)jk

……等等,前面的分母都有(j−1)!(j-1)!(j1)!了,我们干脆拆成(j−1)k‾(j-1)^{\underline k}(j1)k好了

∑j=1A(i−1j−1)(n−iA−j)(j−1)k‾\sum_{j=1}^A\binom{i-1}{j-1}\binom{n-i}{A-j}(j-1)^{\underline k}j=1A(j1i1)(Ajni)(j1)k

看着难受,除一个k!k!k!转成组合数

∑j=1A(i−1j−1)(n−iA−j)(j−1k)\sum_{j=1}^A\binom{i-1}{j-1}\binom{n-i}{A-j}\binom{j-1}{k}j=1A(j1i1)(Ajni)(kj1)

∑j=1A(i−1j−1)(n−iA−j)(j−1k)\sum_{j=1}^A\binom{i-1}{j-1}\binom{n-i}{A-j}\binom{j-1}{k}j=1A(j1i1)(Ajni)(kj1)

=∑j=1A(i−1j−1)(j−1k)(n−iA−j)=\sum_{j=1}^A\binom{i-1}{j-1}\binom{j-1}{k}\binom{n-i}{A-j}=j=1A(j1i1)(kj1)(Ajni)

=∑j=1A(i−1k)(i−k−1i−j)(n−iA−j)=\sum_{j=1}^A\binom{i-1}{k}\binom{i-k-1}{i-j}\binom{n-i}{A-j}=j=1A(ki1)(ijik1)(Ajni)

=(i−1k)∑j=1A(i−k−1i−j)(n−iA−j)=\binom{i-1}{k}\sum_{j=1}^A\binom{i-k-1}{i-j}\binom{n-i}{A-j}=(ki1)j=1A(ijik1)(Ajni)

=(i−1k)∑j=1A(i−k−1j−k−1)(n−iA−j)=\binom{i-1}{k}\sum_{j=1}^A\binom{i-k-1}{j-k-1}\binom{n-i}{A-j}=(ki1)j=1A(jk1ik1)(Ajni)

引理
∑i(ni)(mk−i)=(n+mk)\sum_i\binom ni\binom m{k-i}=\binom{n+m}ki(in)(kim)=(kn+m)
理性愉悦
构造
(x+1)n(x+1)m=(x+1)n+m(x+1)^n(x+1)^m=(x+1)^{n+m}(x+1)n(x+1)m=(x+1)n+m
比较xkx^kxk项系数得证
感性愉悦
n+mn+mn+m件物品选择kkk件,等价于分成nnnmmm两堆,在前一堆选任意iii件,在另一堆选剩下的k−ik-iki件。

=(i−1k)(n−k−1A−k−1)=\binom{i-1}{k}\binom{n-k-1}{A-k-1}=(ki1)(Ak1nk1)

左边就是关于iiikkk次下降幂多项式,也就是kkk次多项式,右边是个无关的常数。因为k≤typek\leq typektype,所以得到的仍然是typetypetype次的多项式。


因为type≤2type\leq 2type2,所以维护333个点值就可以O(1)O(1)O(1)算出任意位置的答案。这里由于懒得写阶乘,维护的是第000项、第一个公差、二阶公差。

在洗牌的时候先插值算出两堆的前333个,然后暴力枚举求出洗牌后前333个的期望。

另外注意题目中从上到下和从下到上的表述。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
const int MOD=998244353;
typedef long long ll;
inline int qpow(int a,int p)
{int ans=1;while (p){if (p&1) ans=(ll)ans*a%MOD;a=(ll)a*a%MOD;p>>=1;}return ans;
}
int A,B,C;
inline int calc(int x){return (A+(ll)B*x+(ll)x*(x-1)/2%MOD*C)%MOD;}
int main()
{int n,m,type;scanf("%d%d%d",&n,&m,&type);if (type==1) A=n+1,B=MOD-1;else A=(n+1ll)*(n+1)%MOD,B=(MOD-2*n-1),C=2;int inv[3]={qpow(n,MOD-2),qpow(n-1,MOD-2),qpow(n-2,MOD-2)};while (m--){int k;scanf("%d",&k);k=n-k;int a[3]={calc(1),calc(2),calc(3)},b[3]={calc(k+1),calc(k+2),calc(k+3)},c[3]={};for (int S=0;S<8;S++){int cnt[2]={},v=1,x=k,y=n-k;for (int i=0;i<3;i++) {if ((S>>i)&1) ++cnt[1],v=(ll)v*y%MOD*inv[i]%MOD,--y;else ++cnt[0],v=(ll)v*x%MOD*inv[i]%MOD,--x;}if (cnt[0]>k||cnt[1]>n-k) continue;cnt[0]=cnt[1]=0;for (int i=0;i<3;i++){if ((S>>i)&1) c[i]=(c[i]+(ll)v*b[cnt[1]])%MOD,++cnt[1];else c[i]=(c[i]+(ll)v*a[cnt[0]])%MOD,++cnt[0];}}C=((c[2]-2*c[1]+c[0])%MOD+MOD)%MOD;B=((c[1]-c[0]-C)%MOD+MOD)%MOD;A=(c[0]-B+MOD)%MOD;}int q;scanf("%d",&q);while (q--){int x;scanf("%d",&x);printf("%d\n",calc(n-x+1));}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构杂谈《二》

服务化到微服务1、微服务的产生随着互联网企业的不断发展&#xff0c;海量用户发起的大规模、高并发请求是企业不得不面对的&#xff0c;上一篇 架构杂谈《一》杂谈的SOA服务化系统能够分解任务&#xff0c;让每个服务更简单、职责单一、更易于扩展。但无论是Web Service 还是E…

Good Bye 2017 G. New Year and Original Order 数位dp + 按数贡献

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 定义S(k)S(k)S(k)为将kkk的每一位拿出来从小到大排序后构成的数&#xff0c;比如S(3421)1234S(3421)1234S(3421)1234&#xff0c;求S(k)1≤k≤nS(k)_{1\le k\le n }S(k)1≤k≤n​。 1≤n≤107001\le n\le 10…

【NOI2019】 机器人 【区间dp】【插值】【下降幂多项式】【分段函数】

题意&#xff1a;有个长度为nnn的序列aaa&#xff0c;ai∈[Li,Ri]a_i\in [L_i,R_i]ai​∈[Li​,Ri​]。从一个位置sss可以往左直到≥as\geq a_s≥as​,往右直到>as> a_s>as​。求有多少种可能的序列满足从任意位置向左或向右的最大步数的差的绝对值不超过222。 n≤300…

上海理工大学第二届“联想杯”全国程序设计邀请赛 Identical Day 思维 + 暴力

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个010101序列&#xff0c;假设有一段长为lll连续的全111子串&#xff0c;定义这段字串不高兴值为l∗(l1)2\frac{l*(l1)}{2}2l∗(l1)​&#xff0c;整个串的所有不高兴值相加为总的不高兴值。现在你可以…

简化 Pod 故障诊断:kubectl-debug 介绍

背景容器技术的一个最佳实践是构建尽可能精简的容器镜像。但这一实践却会给排查问题带来麻烦&#xff1a;精简后的容器中普遍缺失常用的排障工具&#xff0c;部分容器里甚至没有 shell (比如 FROM scratch &#xff09;。在这种状况下&#xff0c;我们只能通过日志或者到宿主机…

dotnet 新项目格式与对应框架预定义的宏

在 sdk style 的项目格式支持使用多框架开发&#xff0c;此时需要在代码里面通过宏判断&#xff0c;在编译的时候执行不同的代码。本文告诉大家在框架里面对应的预定义的条件编译符有哪些在让一个 csproj 项目指定多个开发框架 - walterlv告诉大家如何在 sdk style 项目格式如何…

【UOJ549】序列妙妙值【异或】【根号分治】

题意&#xff1a;给一个长度为nnn的序列aaa&#xff0c;将其分成kkk段&#xff0c;不能为空&#xff0c;求所有段的异或和之和的最小值。 n≤6104,ai<216,k≤8n\leq 6\times 10^4,a_i <2^{16},k\leq 8n≤6104,ai​<216,k≤8 先求个前缀异或和&#xff0c;显然有个 dp…

Educational Codeforces Round 76 (Rated for Div. 2) E. The Contest 思维 + 差分

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你三个长度分别为k1,k2,k3k1,k2,k3k1,k2,k3的数组a,b,ca,b,ca,b,c&#xff0c;其中k1k2k3nk1k2k3nk1k2k3n&#xff0c;这三个数组中的元素拼接起来是一个nnn的排列&#xff0c;每次可以将某个数组中的某个…

TPL Dataflow .Net 数据流组件,了解一下?

作为单体程序&#xff0c;依赖的第三方服务虽不多&#xff0c;但是2C的程序还是有不少内容可讲&#xff1b;作为一个常规互联网系统&#xff0c;无外乎就是接受请求、处理请求&#xff0c;输出响应。由于业务渐渐增长&#xff0c;数据处理的过程会越来越复杂和冗长&#xff0c;…

【CF1394B】Boboniu Walks on Graph【图论】【集合哈希】

题意&#xff1a;给定nnn个点mmm张图的有向图&#xff0c;有1∼m1\sim m1∼m互不相同每个点出度不超过kkk。对于一个 kkk元组cic_ici​&#xff0c;图中的每个点uuu只保留第cdeguc_{deg_u}cdegu​​小的边。求有多少种ccc使得在保留下来的图中每个点沿着出边一直往下走可以走回…

Educational Codeforces Round 76 (Rated for Div. 2) F. Make Them Similar 折半搜索

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 一个显然的思路就是2302^{30}230枚举所有的xxx&#xff0c;让后再检查&#xff0c;这个复杂度显然不能接受。 又发现对于每个位置它取多少不受其他位置限制&#xff0c;满足可拼接性&#…

windows container 踩坑记

windows container 踩坑记Intro我们有一些服务是 dotnet framework 的&#xff0c;不能直接跑在 docker linux container 下面&#xff0c;最近一直在折腾把它部署在 windows container 下&#xff0c;折腾的有点恶心&#xff0c;记录一下。Windows Container 介绍Windows Cont…

生成函数Euler变换学习笔记(无标号有根树计数)

众所周知&#xff0c;对于有标号计数的指数型生成函数 f(x)f(x)f(x)&#xff0c;将其任意地进行无顺序的组合&#xff0c;得到的生成函数是exp(f(x))exp(f(x))exp(f(x))。 而对于无标号计数的这样的组合&#xff0c;我们就需要引入一个叫 Eular\text{Eular}Eular 变换的东西 E…

Codeforces Round #602 (Div. 2) D2. Optimal Subsequences stl 黑科技

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 比较明显的是我们需要将序列从大到小排序&#xff0c;让后取前kkk个数&#xff0c;再从中选择第pospospos小的位置输出当前位置的数即可。 一开始想用setsetset维护&#xff0c;但是setse…

小白开学Asp.Net Core 《七》

小白开学Asp.Net Core 《七》— — 探究中间件&#xff08;MiddleWare&#xff09;1、何为中间件&#xff1f;中间件是组装到应用程序管道中以处理请求和响应的家伙&#xff0c;管道中的每个组件都要满足以下两个条件选择是否将请求传递给管道中的下一个组件可以在调用管道中的…

【SHOI2017】相逢是问候【扩展欧拉定理】【复杂度分析】【线段树】

题意&#xff1a;给定一个长度为 nnn 的序列 aia_iai​&#xff0c;维护 mmm 次操作&#xff1a; 区间执行 ai←caia_i \leftarrow c^{a_i}ai​←cai​&#xff1b;区间求和 模 ppp。 其中 p,cp,cp,c 对所有操作相同。 n,m≤5104,p≤108n,m\leq 5\times 10^4,p\leq 10^8n,m≤…

aspnetcore 实现简单的伪静态化

aspnetcore 实现简单的伪静态化Intro在我的活动室预约项目中&#xff0c;有一个公告模块&#xff0c;类似于新闻发布&#xff0c;个人感觉像新闻这种网页基本就是发布的时候编辑一次之后就再也不会改了&#xff0c;最适合静态化了&#xff0c; 静态化之后用户请求的就是静态文件…

#530. 「LibreOJ β Round #5」最小倍数 二分 + 数论

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 本来想刷数位dpdpdp&#xff0c;无意间碰到了这个题来水水。 我们知道n!n!n!中质因子ppp的个数为∑i1npi\sum_{i1} \frac{n}{p^i}∑i1​pin​&#xff0c;所以我们就可以二分nnn&#xff0…

斜堆学习笔记+复杂度证明

和左偏树几乎一模一样&#xff0c;唯一的区别是左偏树合并后判断如果左儿子深度小于右儿子则交换左右儿子&#xff0c;而斜堆直接无脑交换。 复杂度是均摊的 O(nlog⁡n)O(n\log n)O(nlogn) 证明&#xff1a; 定义重结点为右儿子大小大于左儿子的结点&#xff0c;否则为轻结点…

《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文

写在开始三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击,现在可以致敬伟大的.NET斗士甲骨文了  (JDK8以上都需要收费,Android弃用java作为第一语言,别高兴:OpenJDK是甲骨文的).《ASP.NET Core 高性能系列》是一套如何编…