QOJ5468. 托卡马克
记 Fm(z) 为最大高度不超过 m 的路径生成函数(其中 z 标志线段对数)。根据连分数理论,有:
Fm(z)=1−1−…1−m⋅z2⋅z1⋅z1
这个连分数能表达为两个多项式的比值 Fm(z)=Qm(z)Pm(z)。其分母满足递推式 Qm(z)=Qm−1(z)−mzQm−2(z)。
该递推关系刚好和 Hermite 多项式同构。能够得到其显式闭式解:
Qm(z)=j=0∑⌊(m+1)/2⌋(−1)jj!2j(m+1−2j)!(m+1)!zj
考虑求出分子 Pm(z)。分子度数最高不超过 ⌊m/2⌋。注意到,当不限制最大高度时,所有路径生成函数为 F∞(z)=∑j=0∞(2j−1)!!zj。因为受限高度 m 和不受限的情况在前 m 步是一模一样的,所以两者在模 zm+1 意义下同余。即:
Qm(z)Pm(z)≡F∞(z)(modzm+1)⟹Pm(z)≡Qm(z)F∞(z)(modzm+1)
因为 Pm(z) 实际度数仅为 ⌊m/2⌋,故我们只需要利用截断的 F∞(z) 进行一次多项式乘法,就能精确求出分子 Pm(z)。
时间复杂度 O(nlogn)。
难度评测:Easy+
COCI 2016/2017 #7 F. Klavir
先说结论:
E(S)=j∈Borders(S)∑Nj
证明见 知乎上的一个回答
kmp 之后 dp 一下就做完了,时间复杂度 O(n)。
难度评测:不好评价
CTS2019. 氪金手游
先考虑在一组元素中,有一个元素 u 最先被抽到,其概率恰好为 ∑x∈SWxWu。如果所有的偏序限制构成了一棵外向树,并且这棵树上的节点构成了集合 S,那么整个外向树的偏序同时成立的概率等于树中每个节点满足比其所有子孙节点先出现的概率的乘积:
P(外向树)=u∏SuWu
其中,Su 为在这个外向树中,以 u 为根的子树的所有节点的权值之和。
用容斥把树转化为若干外向树之后做背包,时间复杂度 O(n2)
难度评测:Easy
GCJ 2014 Finals. ARAM
在状态 u 下进入英雄选择阶段时,有两种操作:
- 保留当前英雄 i:获得奖励 Pi,消耗掉一局游戏时间,下局开始时点数变为 min(C,u+1)。
- 重新抽取:仅当 u≥G 时可用,消耗 G 点数,不消耗游戏时间,状态变为 u−G。
显然对于任意状态 u≥G,我们一定会设定一个阈值,保留胜率前 ku 高的英雄,重新抽取剩下的 N−ku 个英雄。
高斯消元直接解线性方程可以通过 Subtask1。把高斯消元改成 SGS 可以获得满分,具体做法见 arXiv。
难度评测:Hard
NERC 2020 Online. Hit the Hay
这个题咱还不会 w
loj6874. zhylj 的抽卡
比较没意思的题。
设 ti 为物品 i 的首次出现时间,有:
E(ti)=pi1,E(ti2)=pi22−pi1
对于 i=j 的乘积期望 E(titj),有:
E(titj)=pipj1−pi+pj1
把式子拆开:
tˉ=n1i=1∑nti⟹E(tˉ)=n1i=1∑npi1
对于方差 σ2 的期望:
E(σ2)=n1i=1∑nE(ti2)−n21E(i=1∑nti)2=n2n−1i=1∑nE(ti2)−n21i=j∑E(titj)
化简可得:
E(σ2)=n21(2n−1)i=1∑npi21−(n−1)i=1∑npi1−(i=1∑npi1)2+i=j∑pi+pj1
注意到 pi=Sqi(其中 S=∑qk),前面的式子的大多数项可以直接线性计算。比较困难的是交叉项和 ∑i=jpi+pj1=S∑i=jqi+qj1。
考虑构造多项式 P(x)=∏j=1n(x+qj),其对数导数为:
P(x)P′(x)=j=1∑nx+qj1
令 x=qi 有:
j=i∑qi+qj1=P(qi)P′(qi)−2qi1
考虑对所有的 i 计算出 P(qi) 和 P′(qi) 的值。注意到 M(x)=∏j=1n(x−qj) 满足 M(qi)=0,令 R(x)=P(x)−M(x),它的最高次项会被消去,度数为 n−1,且 P(qi)=R(qi)。
所以只需要在 n 个点 q1,…,qn 上计算 R(x) 和 P′(x),转置 NTT 多点求值可以做到 O(nlog2n)。
难度评测:Medium
CF1924E. Paper Cutting Again
原问题显然等价于将初始的 n−1 条垂直线(集合 V)和 m−1 条水平线(集合 H)进行随机全排列,我们按排列顺序检查每一条线,如果这条线还没有被丢弃,则进行切割,并丢弃比它编号更大的线。
状态 (x,y) 被访问当且仅当它成为某一时刻的双重下界,我们考虑如下分类讨论:
- (n,m):显然概率为 1。
- (n,y) (y<m):在排列中,线 y∈H 必须出现在所有的 V 以及所有的 {1,…,y−1}⊂H 之前。相关元素的总数为 (n−1)+(y−1)+1=n+y−1。概率为:
P(n,y)=n+y−11
- (x,m) (x<n):根据对称性,概率为:
P(x,m)=x+m−11
- (x,y) (x<n,y<m):x 和 y 必须是各自集合中的历史最小值。在排列中,x 和 y 这两个元素必须排在所有 V<x 和 H<y 之前。相关元素总数为 (x−1)+(y−1)+2=x+y。它们占据前两名的概率为:
P(x,y)=(x+y)(x+y−1)2=x+y−12−x+y2
期望步数为上述所有满足 x⋅y≥k 的状态概率之和,时间复杂度线性。
难度评测:Easy+
ARC136F. Flip Cells
绝世好题,这里给一个和官方题解完全不同的线性代数做法。
我们将每一行 1 的数量记录下来,构成状态向量 c=(c1,c2,…,cH),其中 ci∈[0,W] 表示第 i 行当前 1 的个数。初始状态为 C,目标状态为 A。
每次操作以等价为以 H1 的概率选中第 i 行,然后在该行以 Wci 的概率将 1 翻转为 0,以 WW−ci 的概率将 0 翻转为 1,显然每行是独立的。
对于每一行,它的转移矩阵 M 拥有 W+1 个特征值,分别为:
λk=1−W2k(k=0,1,…,W)
其对应的右特征向量是 Krawtchouk 多项式 Kk(c):
Kk(c)=j=0∑k(−1)j(jc)(k−jW−c)
该特征向量在权重 π(c)=(cW)2−W 下是正交的,满足 ∑c=0Wπ(c)Kk(c)Kl(c)=(kW)δk,l。
注意到全局的转移矩阵可以看作各行转移矩阵的组合,全局特征向量是各行特征向量的张量积:
Kk(c)=i=1∏HKki(ci)其中 k=(k1,k2,…,kH)
对应的全局特征值为:
Λk=H1i=1∑Hλki=1−HW2i=1∑Hki
对于可逆马尔可夫链,从初始状态 C 到达目标状态 A 的期望步数 EC 有正交基展开公式:
EC=k=0∑Nk(1−Λk)Kk(A)2−Kk(C)Kk(A)
其中 Nk=∏i=1H(kiW) 为内积的模长。
将 1−Λk=HW2∑i=1Hki 代入,令 S=∑i=1Hki,式子可以拆分为对每一行的乘积:
EC=2HWS=1∑HWS1∑ki=S∑(i=1∏H(kiW)Kki(Ai)2−i=1∏H(kiW)Kki(Ai)Kki(Ci))
为此,对于第 i 行,分别构造两个多项式:
PUi(x)=k=0∑W((kW)Kk(Ai)2)xk
PVi(x)=k=0∑W((kW)Kk(Ai)Kk(Ci))xk
我们只需求出这 H 个 PU(x) 的乘积多项式 F(x),以及这 H 个 PV(x) 的乘积多项式 G(x)。
最后,答案即为:
EC=2HWS=1∑HWS[xS]F(x)−[xS]G(x)(mod998244353)
难度评测:Hard
P7437. 既见君子
典题,显然分母就是原图生成树,可以直接矩阵树定理求,分子是经过 z 的生成树个数,高斯消元做就好了。
难度评测:Easy
CF1866M. Mighty Rock Tower
定义 Dx=fx−fx−1。显然:
Dx=1+k=1∑x−1pxk(1−px)(fx−fx−k)+pxx(fx−f0)
将 fx−fx−k=∑i=1kDx−i+1 代入,化简为:
Dx=1+y=1∑xpxx−y+1Dy
把等式右侧的 y=x 这一项 pxDx 移到左边得到:
Dx=1−px1+∑y=1x−1pxx−y+1Dy
观察分子中的求和部分 S(x)=∑y=1x−1pxx−y+1Dy。如果底数 px 固定为 p,可以发现:
Sp(x)=y=1∑x−1px−y+1Dy=p⋅Sp(x−1)+p2Dx−1
时间复杂度 O(n)。
难度评测:Easy
MX-NOI 模拟赛 4 T2.
这个题咱还不会 w 现在会了。
首先可以发现如果区间 [i,j]、[t,k](i≤t≤j≤k)都是好的,那么区间 [i,k] 也是好的。
那么设 ri 为以 i 为左端点的最长的好的区间的右端点。
设 li 表示最大的 j 使得 rj≥ri(j<i),考虑建出一棵树,节点 i 的父亲是 li。如果 li 不存在,则设 0 节点为其父亲。可以发现树上一对有祖先关系的节点即对应了原区间中的一个好区间。
同时注意到
(i=l∑kci)>ck+1
是否成立其实只和 i−1、k、k+1 这三个位置是否操作有关。
考虑按树的结构进行 dp,设
dpl,r,f1,f2,f3,f4
表示当前子树的根是 l,其子树中包含了 [l,r) 中的节点,和 l−1,l,r−1,r 这四个位置的操作情况。dp 的值是区间 [l,r) 的所有操作情况的子区间的贡献之和。
转移考虑枚举一个 i(l<i<r)作为节点 l 剩余儿子中最大的一个,同时枚举 i1,i2 表示位置 i−1,i 的操作情况,此时要求的是 [l,i] 这个区间是好的,且区间 [i,r] 不是好的。这里因为问题还会被递归到 [l,i)、[i,r) 的两个子问题,可以证明其余的位置只要在子问题中合法,在当前情况一定合法。答案记得乘上系数 kr−i。
时间复杂度 O(n3)。
难度评测:Hard-
CF1450H2. Multithreading (Hard Version)
这题也太牛了。
对于给定的一种合法染色方案,匹配时异色交点对数的最小值为:
f(c)=21∣be−bo∣
其中 be 和 bo 分别是偶数位置和奇数位置上的黑色线轴数量。
由于总数为偶数,必定有 be+we=2n,bo+wo=2n,所以式子等价于:
f(c)=21be+wo−2n
这意味着只需要考虑在偶数位置为 b 以及在奇数位置为 w 的数量。
假设当前未确定的线轴共有 k 个。因为保证最终 b 的总数为偶数,在所有 2k 种填法中,恰有一半会产生合法的染色。因此,期望值为所有合法状态的 f(c) 之和除以 2k−1,等价于求所有组合中 f(c) 两倍的绝对值之和,最后除以 2k。
设已有确定字符的贡献和为 C,未确定位置中同样做出该选择的个数为 i (0≤i≤k)。令 D=C−2n,则答案就是:
Ans=2k1i=0∑k(ik)[i≡D(mod2)]∣i+D∣
考虑去掉绝对值。如果 D≥0,由于 i≥0,绝对值可直接去掉,化简后得到:
Tot(k,D)=i=0∑k(ik)[i≡D(mod2)](i+D)=k⋅2k−2+D⋅2k−1(k≥2)
若 D<0,除了基础的 Tot(k,D) 之外,对于那些使 i+D<0 的项,我们需要额外加上两倍它的相反数来进行补偿。设 R=−D,这一补偿项为:
2i=0∑R(ik)[i≡R(mod2)](R−i)
上式可表示为:
2(R⋅Y(k,R)−k⋅Y(k−1,R−1))
其中 Y(n,m)=∑i=0m(in)[i≡m(mod2)]。
利用组合恒等式,可以证明:
Y(n,m)=i=0∑m(in−1)=B(n−1,m)
这里 B(N,M) 是最普通的二项式前缀和。
修改的时候显然存在结论:
- B(N,M+1)=B(N,M)+(M+1N)
- B(N,M−1)=B(N,M)−(MN)
- B(N+1,M)=2B(N,M)−(MN)
- B(N−1,M)=21(B(N,M)+(MN−1))
用三个指针维护一下就好了,时间复杂度 O(n+m)。
难度评测:Medium+
NAC2020 D. All Kill
Ω={(T1,…,Tn)∈{1,…,t}n}Ii=[Si,Si+ci−1](i∈{1,…,n})(T1,…,Tn)∈Ω⟺{Si+ci−1≤t,Tj∈/Ii,∀i∈{1,…,n}∀j<iRk=j=n−k+1∑ncj(k∈{1,…,n})∣{Tn}∣=t−cn+1=t−R1+1∣{Tn−k+1∣Tn,…,Tn−k+2}∣=(t−Rk−1)−cn−k+1+k∣{Tn−k+1∣Tn,…,Tn−k+2}∣=t−Rk+k(k∈{2,…,n})∣Ω∣=∣{Tn}∣⋅k=2∏n∣{Tn−k+1∣Tn,…,Tn−k+2}∣∣Ω∣=(t−R1+1)k=2∏n(t−Rk+k)∣Ω∣=(t−Rn+1)k=1∏n−1(t−Rk+k+1)Sn=Rn=j=1∑ncjp⋅tn=∣Ω∣=(t−Sn+1)i=1∏n−1(t−Ri+i+1)(mod998244353)
时间复杂度 O(n)。
难度评测:Easy+
PA2025. Egzamin
定义 fj 表示在前 i 道题中,恰好答对 j 道题的概率,显然:
fj=fk−1∗pi+fj∗(1−fi)
这是一个经典的泊松二项分布,所以答对题目的数量大致符合正态分布,方差最大为 4N=12500,标准差 σ≈111,转移的时候维护一下有效概率区间 [L,R] 就做完了。时间复杂度我不会证,但是应该是 O(nn) 左右吧。
难度评测:Medium-
AGC032F. One Third
虽然这个题很牛,但是我真的很讨厌做代数几何。
这里给一个不需要几何或者积分基础,完全凭感觉的做法。
考虑将披萨的周长标准化为 1。切 N 刀等价于在一个周长为 1 的圆上,独立且均匀随机地投下 N 个点 P1,P2,…,PN∈[0,1)。
直接在周长为 1 的大圆上处理 ∣x−1/3∣ 比较困难。我们考虑 ∣x−1/3∣ 的几何意义其实表示的是大圆上某一点 Pi,与另一点 Pj 顺时针(或逆时针)旋转 1/3 后的位置之间的最短距离。
为了消除这个 1/3 的偏移量,想象把这个周长为 1 的大圆,紧紧地缠绕在一个周长为 1/3 的小圆上,正好缠绕 3 圈。此时,原圆上的任意点 Pi 在小圆上的坐标为:
Xi=Pimod(1/3)
同时,为了记住这个点原本属于哪一圈,我们给它打上一个标签:
Ci=⌊3Pi⌋∈{0,1,2}
现在,这 N 个点落在了周长为 1/3 的小圆上,把小圆分割成了 N 段弧。设我们将这 N 个点在小圆上顺时针排序,它们之间的 N 段弧长依次为 g1,g2,…,gN,显然有 ∑k=1Ngk=1/3。
观察一下小圆上的每一段弧 gk。它连接了小圆上的相邻两点,设起点标签为 cA,终点标签为 cB,这段弧 gk 代表了大圆上两个点在去除了若干个 1/3 之后的纯粹距离。
- 如果 cA=cB,说明这两个点在同一圈,它们在大圆上的真实距离就是 gk。但我们需要的是靠近 1/3 的距离,所以这不是我们想要的。
- 如果 cA=cB,说明这两个点在大圆上跨越了不同的圈,它们在大圆上的真实距离恰好是 1/3+gk 或 1/3−gk 乃至 2/3±gk。此时,gk 恰好就是绝对值误差 ∣x−1/3∣。
所以其实就是小圆上所有两端点标签不同的弧 gk 中的最小值。
为了严格描述标签的变化,我们定义第 k 段弧的标签变化(差值)为 Dk。
如果我们把所有 Dk 加起来,相当于绕小圆走了一整圈,大圆上对应走过了 1/3 的长度。因此,必定有:
k=1∑NDk≡1(mod3)
由于投点是完全随机的,所以这 N 个差值 D1,D2,…,DN∈{0,1,2} 是独立均匀分布的,只要满足它们的和模 3 余 1 即可。这样的序列 D 共有 3N−1 种。
假设在某种序列 D 中,有恰好 K 个非零项。这意味着在 N 段总长为 1/3 的弧中,有 K 段是我们要找的有效弧。
E=K=1∑NP(K)×E(K)=K=1∑N3N−1(KN)AK×3KN1=K=1∑N3N−1(KN)32K−(−1)K×3KN1=N⋅3N+11K=1∑N(KN)K2K−(−1)K
其中 P(K) 为恰好有 K 个非零项的概率,时间复杂度 O(n)。
难度评测:Hard-
CTSC2017. 游戏
小 R 每局获胜与否仅与前一局的结果相关,因此构成了一个一阶马尔可夫链,特定对局的结果将整个 n 局的序列切分成了多个相互独立的区间。
对于一个被固定点 L 和 R 夹在中间的开区间 (L,R)(其两端取值分别为 cL,cR)考虑计算区间内部的期望和:E∑i=L+1R−1Si∣SL=cL,SR=cR。
显然我们有:
ESum∣SR=cR=P(SR=cR)ESum∧(SR=cR)
构建一组状态:P0,P1 分别表示当前局小 B 和小 R 获胜的概率。E0,E1 分别表示在当前局小 B 和小 R 获胜的情况下,当前区间已累加胜场的期望。
由第 i−1 局转移到第 i 局,转移如下:
- P0′=P0(1−qi)+P1(1−pi)
- P1′=P0qi+P1pi
- E0′=E0(1−qi)+E1(1−pi)
- E1′=E0qi+E1pi+P1′
这个转移显然可以用矩阵维护,时间复杂度 O(n+mlogn+mlogm)
难度评测:Easy