数学做题记录-2

数学做题记录-2

CF1774G. Segment Covering

首先,如果一条线段包含另一条线段,那么这条线段可以删除,因为如果这条线段在方案中被选择了,那么它所包含的线段选择或不选择都是可以的,然而此时的线段的奇偶性的不一样的,也就是贡献相反,所以我们只需要考虑不选择这条线段的方案。

此时线段两两互不包含,考虑对于组成区间 \([l,r]\) 的三条左端点升序的线段 \([l_1,r_1][l_2,r_2][l_3,r_3]\),如果有 \(l_3\le r_1\),那么当第一条线段和第三条线段同时选择时,第二条线段选择或不选择都是可以的。假设第一条线段是必须选择,那么第三条线段是可以删除的,也就是说第二条线段也是必须选择的,对区间 \([l,r]\) 内的所有线段进行推广,可以得出所有相邻的第奇数条线段两两不交,相邻的第偶数条线段两两不交。结合上面的结论,我们得出奇数线段的下一条奇数线段一定是第一个和自己不交的线段,偶数同理,于是答案的贡献只剩下这一种的贡献,即假设总共有 \(k\) 条线段,那么答案为 \((-1)^k\)。通过从线段向后面第一个不交的线段联编,我们可以得到一个树形结构,考虑用倍增去跳到奇数和偶数在 \([l,r]\) 内的最后一条线段,这样就可以统计 \(k\) 的奇偶性了。

实现的时候注意对于边界条件的判断,比如第一条线段和第二条线段是否符合在 \([l,r]\) 内的条件、线段是否不连续导致最后跳到的线段相同。复杂度可以做到 \(O(q\log n)\)

LG6624. [省选联考 2020 A 卷] 作业题

对后面的 \(\gcd\) 肯定是要进行反演的,但与其使用莫比乌斯反演,不如直接使用 \(\varphi*1=\text{id}\),然后对原式进行改写:

\[\begin{aligned}&\sum_{T}(\sum_{i}w_{e_i})\times \gcd(w_{e_1},w_{e_2},\cdots,w_{e_{n-1}})\\=&\sum_{T}(\sum_{i}w_{e_i})\sum_{d|w_{e_1},d|w_{e_2},\cdots,d|w_{e_{n-1}}}\varphi(d)\\=&\sum_{d=1}^{V}\varphi(d)\sum_{T}[d|w_{e_1},d|w_{e_2},\cdots,d|w_{e_{n-1}}]\sum_{i}w_{e_i} \end{aligned} \]

综上,我们只需要求出所有边权都是 \(d\) 的倍数的生成树的边权和即可。考虑到矩阵树定理求解的内容是树的边权积的和,因此需要考虑转化。考虑将贡献拆成每一条边在多少个生成树中出现,即贡献为 \(w_i\) 成生成树的数量。考虑构造边权 \(W=w_ix+1\),然后正常使用矩阵树定理之后求一次项系数即可,正确性是显然的。事实上,因为只用求一次项系数,因此维护的多项式对 \(x^2\) 取模即可。考虑求解行列式需要用到的运算:

\[\left\{\begin{aligned}&(a+bx)+(c+dx)\equiv(a+c)+(b+d)x\\&(a+bx)-(c+dx)\equiv(a-c)+(b-d)x\\&(a+bx)(c+dx)\equiv ac+(bc+ad)x\\&\frac{1}{a+bx}\equiv \frac{1}{a}-\frac{b}{a^2}x \end{aligned}\right.\pmod{x^2} \]

最后一个运算用待定系数法可以简单得到,然后我们可以在 \(O(n^3V)\) 的复杂度内求出答案,这可能比较紧张,但我们可以只对拥有多于 \(n-1\) 条边的边权是其倍数的 \(d\) 求解,这样复杂度降为 \(O(n^3\dfrac{\sum\sigma(w)}{n-1}=n^2\sum\sigma(w))\),可以通过并且上界很松。

LG5605. 小 A 与两位神仙

题目是幂的形式,但不能直接用 bsgs,并且 \(m\) 可以写成 \(p^\alpha\) 的形式,于是可以考虑原根。设 \(m\) 的原根为 \(g\),那么因为 \(\gcd(x,m)=\gcd(y,m)=1\),于是有 \(x=g^{\text{ind}_gx},y=g^{\text{ind}_gy}\),于是方程可以改写为

\[\begin{aligned}x^a\equiv y\pmod m&\Rightarrow (g^{\text{ind}_gx})^a\equiv g^{\text{ind}_{g}y}\pmod m\\&\Rightarrow g^{a\text{ind}_gx}\equiv g^{\text{ind}_gy}\pmod m\\&\Rightarrow a\text{ind}_gx\equiv \text{ind}_gy\pmod{\varphi(m)}\\&\Rightarrow a\text{ind}_gx+\lambda\varphi(m)=\text{ind}_gy \end{aligned} \]

根据裴蜀定理可以得到方程有解当且仅当 \(\gcd(\text{ind}_gx,\varphi(m))|\text{ind}_gy\),考虑到只有一边 \(\gcd\) 较为难看,因为 \(\gcd(\text{ind}_gx,\varphi(m))|\varphi(m)\),所以可以推出 \(\gcd(\text{ind}_gx,\varphi(m))|\gcd(\text{ind}_gy,\varphi(m))\)。考虑如何化简 \(\gcd\),考虑 \(g\) 关于 \(m\) 的简化剩余系是一个 \(\varphi(m)\) 的环,而 \(g^{\text{ind}_gx}\) 相当于一次走 \(\text{ind}_gx\) 步,那么第一次走会到原点需要走 \(\dfrac{\text{lcm}(\text{ind}_gx,\varphi(m))}{\text{ind}_gx}\) 步,考虑这个内容的意义,不难发现这个答案即为 \(\text{ord}_mx\),也就是 \(x\) 的阶。同时,我们化简 \(\text{lcm}\) 得到 \(\dfrac{\text{lcm}(\text{ind}_gx,\varphi(m))}{\text{ind}_gx}=\dfrac{\varphi(m)}{\gcd(\text{ind}_gx,\varphi(m))}\),也就是 \(\gcd(\text{ind}_gx,\varphi(m))=\dfrac{\varphi(m)}{\text{ord}_mx}\),到这里我们可以把式子进一步写作

\[\gcd(\text{ind}_gx,\varphi(m))|\gcd(\text{ind}_gy,\varphi(m))\Rightarrow\frac{\varphi(m)}{\text{ord}_mx}|\frac{\varphi(m)}{\text{ord}_my}\Rightarrow \text{ord}_my|\text{ord}_mx \]

因此只需要求出 \(\text{ord}_mx\) 即可快速求解,这个内容可以在快速分解 \(\varphi(m)\) 的质因子后用试除法做到 \(O(\log^2m)\)。求出 \(\varphi(m)\) 需要得知 \(m\) 具体由哪一个 \(p\) 组成,包括快速分解大数质因子,都可以使用 Pollard-Rho 算法做到 \(O(m^{0.25})\),因此总复杂度是 \(O(m^{0.25}+T\log^2 m)\)

LG6610. [Code+#7] 同余方程

考虑用 CRT 可以将\(\bmod p\) 拆分若干 $\bmod $ 若干奇素数的同余方程组,只要 \(a^2+b^2\) 可以一一满足这些方程组,那么就可以用 CRT 合并出题目中所要求的同余方程组。因此可以考虑对每一个同余方程组算出合法解数后简单相乘即可,所以下面的讨论只针对 \(p\) 为奇素数。

考虑可以暴力枚举所有 \(A=a^2,B=b^2\),要求 \(A+B\equiv x\pmod p\),考虑每一个 \(A,B\) 对应多少个原值,不难看出当 \(A\)\(p\) 的二次剩余时有两个原值和 \(A\) 对应,当 \(A=0\) 时只有一个值和 \(A\) 对应,当 \(A\)\(p\) 的二次非剩余时没有值和 \(A\) 对应。考虑可以用 \(\left(\dfrac{A}{p}\right)+1\) 简单表示出这个内容,那么答案即为

\[\sum_{A+B\equiv x\pmod p}\left(\left(\frac{A}{p}\right)+1\right)\left(\left(\frac{B}{p}\right)+1\right) \]

因为 \(p\) 的二次剩余和二次非剩余个数均为 \(\dfrac{p-1}{2}\),所以 \(\sum\limits_{A=0}^{p-1}\left(\dfrac{A}{p}\right)=0\),再结合 \(B\equiv x-A\pmod p\) 和勒让德符号的完全积性,于是上面的式子就可以写成

\[p+\sum_{A=0}^{p-1}\left(\frac{Ax-A^2}{p}\right) \]

看起来这个东西较难求解,然而关注到当 \(A\ne 0\) 的时候将上面除以 \(A^2\) 不影响结果,并且 \(A=0\) 时勒让德符号取 \(0\),于是答案即为

\[p+\sum_{A=1}^{p-1}\left(\frac{\dfrac{x}{A}-1}{p}\right) \]

考虑到当 \(x\ne 0\) 时,\(\dfrac{x}{A}\) 取遍 \([1,p-1]\),因此 \(\dfrac{x}{A}-1\) 取遍 \([0,p-2]\),于是可以得到 \(x\ne 0\) 时的答案即为 \(p-\left(\dfrac{-1}{p}\right)=p-(-1)^{\frac{p-1}{2}}\)。而当 \(x=0\) 时,不难得到答案为 \(p-(p-1)\left(\dfrac{-1}{p}\right)=p-(p-1)(-1)^{\frac{p-1}{2}}\)。对给出的 \(p\) 的所有奇素因子进行求解后相乘即可,复杂度是 \(O(n\log p)\) 的。

GYM103415J. Cafeteria

首先可以想到一个简单的 dp:设 \(f(i,p)\) 表示区间 \([l,r]\) 枚举到了第 \(i\) 位,匹配到了第 \(p\) 位的方案数,答案即为 \(f(r,m)\),复杂度为 \(O(tnm)\)。考虑用矩阵去代替转移,第 \(i\) 位的矩阵 \(T_i\) 不难看出来为

\[T_{i,p,q}=\left\{\begin{aligned}&1&&(p=q)\\&[a_i=b_q]&&(p+1=q)\\&0&&(\text{otherwise}) \end{aligned}\right. \]

那么区间 \([l,r]\) 的答案即为 \((\prod\limits_{i=l}^{r}T_i)_{0,m}\),这样可以做到 \(O(tnm^3)\) 的复杂度。设 \(A=\begin{bmatrix}1&0&\cdots&0\end{bmatrix}\),计算 \((A\prod\limits_{i=l}^{r}T_i)_m\) 可以将复杂度优化到 \(O(tnm^2)\)

考虑区间矩阵乘法可以用矩阵逆元解决,不难发现所有的 \(T_i\) 一定可逆,我们构造 \(P_k=T_kT_{k+1}\cdots T_n,Q_k=T_{n}^{-1}T_{n-1}^{-1}\cdots T_{k}^{-1}\),那么区间 \([l,r]\) 的答案即为 \((P_lQ_{r+1})_{0,m}\),用矩阵乘法的结合律可以简单说明这点。注意实际操作的时候我们只关注一个位置的值,因此只用进行 \(O(m)\) 次乘法。此时的空间复杂度为 \(O(nm^2)\),时间复杂度为 \(O(nm^3+tm)\)

现在只需要考虑如何优化空间和预处理的时间。对于空间来说,可以简单发现计算答案矩阵第 \(0\) 行第 \(m\) 列的值只需要用到 \(P\) 的第 \(0\) 行和 \(Q\) 的第 \(m\) 列,那么我们处理的时候使用完整矩阵,存储时仅存储所需信息,即可做到空间复杂度 \(O(nm)\)。对于预处理的复杂度,关注到 \(T_kP_{k+1}\) 相当于从小到大枚举所有 \(a_k\) 出现在 \(b\) 中的位置 \(p\),然后将第 \(p-1\) 行加上第 \(p\) 行,因此只需要找到所有位置直接加即可,复杂度是 \(O(nm^2)\) 的。同样对 \(T^{-1}\) 进行观察,发现 \(Q_{k+1}T_{k}^{-1}\) 相当于从小到大枚举所有 \(a_k\) 出现在 \(b\) 中的位置 \(p\),然后将第 \(p\) 列减去第 \(p-1\) 列,那么 \(Q\) 的求解也是 \(O(nm^2)\) 的。于是最后的空间复杂度是 \(O(nm)\),时间复杂度是 \(O(nm^2+tm)\)

GYM103415K. Magus Night

考虑用容斥解决这个问题。我们对集合 \(S=\{S_1,S_2,\cdots,S_n\}\) 约定 \(f(S)=\prod S_i,\gcd(S)=\gcd(S_1,S_2,\cdots,S_n),\text{lcm}(S)=\text{lcm}(S_1,S_2,\cdots,S_n)\)。定义全集 \(Z_m=\{S\mid1\le S_i\le m\}\)接下来考虑将所有的 \(S\) 分成三个内容:\(A=\{S\mid S\in Z_m\land\text{lcm}(S)\ge p\land\gcd(S)\le q\},B=\{S\mid S\in Z_m\land \gcd(S)> q\},C=\{S\mid S\in Z_m\land \text{lcm}(S)<p\land \gcd(S)\le q\}\)。那么可以看出答案即为

\[\sum_{S\in A}f(S)=\sum_{S\in Z_m}f(S)-\sum_{S\in B}f(S)-\sum_{S\in C}f(S) \]

不难得到 \(\sum\limits_{S\in Z_m}f(S)=(1+2+\cdots+m)^n\),于是只需要考虑如何求解后两个和式。

对于 \(\sum\limits_{S\in B}f(S)\),我们可以考虑具体枚举 \(S\)\(\gcd\) 是多少,设 \(g(d)\) 表示 \(\gcd\) 恰为 \(d\) 的集合 \(S\)\(f\) 的和,容易想到利用莫比乌斯反演,设 \(h(d)\) 表示 \(\gcd\)\(d\) 的倍数的集合 \(S\)\(f\) 的和,则有

\[\begin{aligned}&h(d)=\sum_{d\mid k}g(k)=d^n\sum_{S\in Z_{\frac{m}{d}}}f(S)\\&g(d)=\sum_{d\mid k}\mu(\frac{k}{d})h(k) \end{aligned} \]

利用 \(\sum\limits_{S\in Z_m}f(S)\) 的通项公式可以迅速求出 \(h(d)\),从而我们可以暴力枚举 \(d\) 的倍数 \(k\)\(g(d)\) 进行求解,然后有 \(\sum\limits_{S\in B}f(S)=\sum\limits_{d=q+1}^{m}g(d)\)。预处理 \(\sum\limits_{S\in Z_m}f(S)\),则以上内容可以在 \(O(m\log n+m\log m)\) 的复杂度内完成。

对于 \(\sum\limits_{S\in C}f(S)\),我们可以考虑具体枚举 \(S\)\(\gcd\)\(\text{lcm}\) 是多少,设两者分别为 \(d,l\),那么应有 \(d\mid l\)。考虑当我们枚举了 \(d,l\) 之后,对于每一个质因子 \(p\),其在指数上的最小值 \(L_p\)\(R_p\) 就都是已知的,那么对于每一个数来讲,这个质因子上的指数也应该在 \([L_p,R_p]\) 之内,并且至少有一个的指数为 \(L_p\),还至少有一个的指数为 \(R_p\)。我们对每个质因子单独考虑满足这个限制的贡献,最后统一的贡献只需要简单相乘即可。考虑继续用容斥求解这个内容,设 \(\min_p\) 为所有数字质因子 \(p\) 指数的 \(\min\)\(\max_p\) 为所有数字质因子 \(p\) 指数的 \(\max\)。考虑满足 \(\min_p\ge L,\max_p\le R\) 的集合 \(S\) 对答案的贡献为 \(t(L,R)\),那么当前要求解的内容即为 \(t(L_p,R_p)-t(L_p+1,R_p)-t(L_p,R_p-1)+t(L_p+1,R_p-1)\)。并且容易发现 \(t(L,R)=(\sum\limits_{k=L}^{R}p^k)^n\),可以考虑用公式 \(\sum\limits_{k=L}^{R}p^k=\dfrac{p^{R+1}-p^L}{p-1}\) 快速求解这个内容。通过对每个 \(\{p,L_p,R_p\}\) 的三元组预处理可以做到 \(O(m\log^2m\log n+m\log^2 m)\) 求解这个内容。

AGC034F. RNG and XOR

首先设 \(p_i\) 表示随机出 \(i\) 的概率,也就是 \(p_i=\dfrac{A_i}{\sum_{j=0}^{2^n-1}A_j}\),接下来可以简单列出转移方程

\[f_i=\left\{\begin{aligned}&\ 0&&(i=0)\\&\sum_{j\oplus k=i}f_jp_k+1&&(i\ne 0) \end{aligned}\right. \]

看到异或卷积的形式可以考虑集合幂级数的形式,用 \((a_0,a_1,\cdots a_m)\) 表示 \(\sum a_ix^i\),也就是应该有

\[(f_0,f_1,\cdots,f_{2^n-1})\oplus(p_0,p_1,\cdots,p_{2^n-1})=(c,f_1-1,f_2-1,\cdots,f_{2^n-1}-1) \]

因为 \(0\) 的转移和其他的不适用,所以用一个数 \(c\) 代替这一项的结果。注意到因为 \(\sum p_i=1\),所以卷积前后和是不变的,因此有 \(c=f_0+2^n-1\)。于是有

\[(f_0,f_1,\cdots,f_{2^n-1})\oplus(p_0,p_1,\cdots,p_{2^n-1})=(f_0+2^n-1,f_1-1,f_2-1,\cdots,f_{2^n-1}-1) \]

注意到 \(i\oplus 0=i\),因此如果将 \(p_0\) 减少一,那么结果的每一项都会对应减少,从而得到

\[(f_0,f_1,\cdots,f_{2^n-1})\oplus(p_0-1,p_1,\cdots,p_{2^n-1})=(2^n-1,-1,-1,\cdots,-1) \]

现在异或卷积中两项已知,因此可以直接算出另一项。然而此时答案是不对的,究其原因在于这个方程组是有多解的:对所有 \(f\) 同时加上或减去 \(k\) 结果不变,由于 \(f_0=0\),所以我们真正的答案其实是 \(f_i-f_0\)。用异或卷积简单实现,复杂度是 \(O(n2^n)\) 的。

AGC038E. Gachapon

考虑所有数都满足条件的期望我们可以考虑 \(\text{Min-Max}\) 容斥,设 \(t_i\)\(A_i\) 随机出的次数 \(\ge B_i\) 的期望时间,并且设 \(S=\{t_1,t_2,\cdots,t_n\}\),同时定义对于集合 \(S=\{s_1,s_2,\cdots,s_k\}\),有 \(\max(S)=\max(s_1,s_2,\cdots,s_k),\min(S)=\min(s_1,s_2,\cdots,s_k)\),那么答案即为 \(E(\max(S))\),同时我们有

\[E(\max(S))=\sum_{\varnothing\ne T\subseteq S}(-1)^{|T|-1}E(\min(T)) \]

考虑如何求解 \(E(\min(T))\),为了方便,记 \(W=\sum\limits_{i\in S}A_i,A(T)=\sum\limits_{i\in T}A_i\)。首先考虑到不是每一步都会走进 \(T\) 中,还有一些无用操作会走到 \(T\) 以外。考虑走到 \(T\) 中的概率为 \(\dfrac{A(T)}{W}\),那么走到一次 \(T\) 里的期望步数就是 \(\dfrac{W}{A(T)}\)。假设每一步都走到 \(T\) 中时期望步数为 \(E\),那么现在相当于每 \(\dfrac{W}{A(T)}\) 步中才有一步走到 \(T\) 中,那么真正的期望就是 \(\dfrac{W}{A(T)}E\),于是现在只考虑 \(T\) 中的数对答案的影响。考虑到 \(E(\min(T))\) 的实际意义是 \(T\) 中刚好存在一个数随机出的次数 \(\ge B\) 的期望时间,于是我们可以考虑枚举 \(T\) 中所有数在刚好存在一个数随机出的次数 \(\ge B\) 时具体出现了多少次,假设 \(T\) 中第 \(i\) 个数为 \(A_{T_i}\),且出现了 \(c_i\) 次,那么枚举的 \(c\) 应满足恰好存在一个 \(c_i=B_{T_i}\),而其他的 \(c_i<B_{T_i}\),也就是

\[E(\min(T))=\dfrac{W}{A(T)}\sum_{i=1}^{|T|}\sum_{c}\left[[c_i=B_{T_i}]+\sum_{p}[p\ne i][c_p<B_{T_p}]=|T|\right]P(c)\sum_{p}c_p \]

然而这样做非常繁琐且不易维护,不难想到每一个最终的合法状态都恰好对应 \(\sum_{p}c_p\) 个不合法状态,也就是 \(c_i<B_{T_i}\) 的状态,将贡献分摊到这些状态上,则只要这些状态被某一个最终状态经过对答案就有 \(1\) 的贡献,那么不难看出每一个状态对答案的贡献其实是其出现的概率,也就是有

\[E(\min(T))=\dfrac{W}{A(T)}\sum_{c_i<B_{T_i}}P(c)\sum_{p}c_p \]

可以考虑将 \(P(c)\) 具体拆开,设 \(B(T)=\sum\limits_{i\in T}(B_{i}-1)\),并将式子稍稍改写,容易得到

\[\begin{aligned}E(\min(T))&=\dfrac{W}{A(T)}\sum_{k=1}^{B(T)}\sum\limits_{c_i<B_{T_i},\sum c_i=k}\dfrac{k!}{\prod c_i!}·\prod_i(\dfrac{A_{T_i}}{A(T)})^{c_i}\\&=W\sum_{k=1}^{B(T)}k!A(T)^{-k-1}\sum_{c_i<B_{T_i},\sum c_i=k}\prod_i\dfrac{A_{T_i}^{c_i}}{c_i!} \end{aligned} \]

于是答案即为

\[\begin{aligned}E(\max(S))&=\sum_{\varnothing\ne T\subseteq S}(-1)^{|T|-1}E(\min(T))\\&=W\sum_{\varnothing\ne T\subseteq S}(-1)^{|T|-1}\sum_{k=1}^{B(T)}k!A(T)^{-k-1}\sum_{c_i<B_{T_i},\sum c_i=k}\prod_i\dfrac{A_{T_i}^{c_i}}{c_i!}\end{aligned} \]

可以考虑用 dp 维护最内层的和式,则因为 \(k!,A(T)^{-k-1}\) 难以在 dp 时维护贡献,因此需要加入到状态设计中。由此,设 \(f(i,s,t)\) 表示当前考虑了前 \(i\) 个数,这些数的 \(c\) 的和为 \(s\)\(A\) 的和为 \(t\) 和式的值,不难考虑一个数要么没有贡献,要么需要对 \(c\) 进行枚举,转移的时候将 \((-1)^{|T|-1}\) 的贡献也加入进来,则转移方程为

\[f(i,s,t)=f(i-1,s,t)-\sum_{c=0}^{B_i-1}f(i-1,s-c,t-A_i)·\dfrac{A_i^{c}}{c!} \]

因为我们转移的时候维护的其实是 \((-1)^{|T|}\),所以答案为 \(-\sum_{s,t}s!t^{-s-1}f(n,s,t)\)。转移是 \(O(\sum A(\sum B)^2)\) 的复杂度。

CF623E. Transforming Sequence

首先注意到 \(n>k\) 时显然无解,因此只用考虑 \(n\le k\) 的情况。容易考虑 dp:设 \(f(i,s)\) 表示前 \(i\) 个数已经有 \(s\) 个位置被选择过的方案数,枚举当前数会新开多少个位置,然后在没有选择的位置中选择对应多个数,选择过的位置可以随意选,那么有转移方程:

\[f(i,s)=\sum_{c=1}^{s}2^{s-c}{k-s+c\choose c}f(i-1,s-c) \]

答案即为 \(\sum_s f(n,s)\),直接做是 \(O(nk^2)\) 的。不难想到将所有转移中的组合数的贡献提出来,也就是可以考虑提前枚举 \(c\),设 \(s=\sum c\),那么最终对答案的总贡献系数应该是 \(\dfrac{k!}{(k-s)!\prod c_i!}\),这启发我们对于每一位置只维护对应的答案贡献,剩下的内容在最后统一计算,新的转移方程就是

\[f(i,s)=\sum_{c=1}^{s}\frac{2^{s-c}f(i-1,s-c)}{c!} \]

答案是 \(k!\sum\limits_s\dfrac{f(n,s)}{(k-s)!}\),同理枚举的 \(c\) 不为 \(0\)。关注到这个形式可以看作 \(F_i(x)=\sum_{s}2^sf(i,s)x^s,G(x)=\sum_{c}\dfrac{x^c}{c!}\) 卷积的形式,也就是 \(F_{i}=F_{i-1}G\),于是我们可以将复杂度优化到 \(O(nk\log k)\),但依然不能通过。考虑一个一个转移有一些慢,可以考虑倍增 FFT。继续设 \(f(i,s)\) 表示长度为 \(i\) 的序列已经有 \(s\) 个位置被选择的方案数:

  1. 如果当前转移的长度 \(A\) 为奇数,有转移

    \[f(A,s)=\sum_{c=1}^{s}\dfrac{2^{s-c}f(A-1,s-c)}{c!} \]

    按照上文叙述的内容可以直接卷积。

  2. 如果当前转移的长度 \(A\) 为偶数,设 \(A=2a\),那么后面的 \(a\) 个数字在原来的选择基础上,还会增加前面 \(a\) 个数字占有的位置随意选择的贡献,也就是有转移方程

    \[f(A,s)=\sum_{c=1}^{s-1}f(a,s)(2^s)^af(a,s-c) \]

    \(F(x)=\sum_{s}2^{sa}f(a,s)x^s,G(x)=\sum_{s}f(a,s)x^s\),那么计算 \(FG\) 即可。

综上,总共会进行 \(O(\log n)\) 次卷积,每次卷积复杂度为 \(O(k\log k)\),那么总复杂度为 \(O(k\log k\log n)\)。注意模数不是 NTT 模数,因此需要用 MTT。

AGC021F. Trinity

考虑列上的限制较多,枚举列来进行 dp。设 \(f(i,c)\) 表示前 \(i\) 列共选择了 \(c\) 行的方案数,注意到除了每一列的第一个黑格和最后一个黑格以外选到之前选过的行是无意义的,因此考虑对于第一个黑格和最后一个黑格是否选择之前选过的内容来分类讨论。枚举这一列填充之后新增加的行数 \(k\) 来转移:

  • \(k=0\),此时没有新增加的行,因此这一列最多有两个格子涂黑,方案数即为 \(1+c+\dbinom{c}{2}\),即分别考虑没有格子、一个格子、两个格子涂黑的情况,从 \(f(i-1,c)\) 转移过来即可。

  • \(k\ne 0\),此是有新增加的行,考虑我们在这 \(c\) 行中钦定 \(k\) 行新增,从而一一对应得出之前的占用行,显然之前只有 \(c-k\) 行被占用,从 \(f(i-1,c-k)\) 转移:

    • 上下两个格子所在行之前都没有被占用,那么我们随意钦定 \(k\) 行即可,系数为 \(\dbinom{c}{k}\)
    • 上下两个格子所在行之前仅有一个被占用,那么我们需要钦定 \(k+1\) 行,并将第一行或最后一行保留,剩下的删去即可,系数为 \(2\dbinom{c}{k+1}\)
    • 上下两个格子所在行之前都被占用,那么我们需要钦定 \(k+2\) 行,并保留第一行和最后一行,系数为 \(\dbinom{c}{k+2}\)

    将三个系数加起来可以发现和为 \(\dbinom{c+2}{k+2}\)

综上,有转移 \(f(i,c)=(1+\dbinom{c+1}{2})f(i-1,c)+\sum\limits_{k=1}^{c}\dbinom{c+2}{k+2}f(i-1,c-k)\),因为不知道具体是哪几行,因此答案为 \(\sum_{k=0}^{n}\dbinom{n}{k}f(m,k)\),复杂度 \(O(mn^2)\)

考虑将组合数拆开,有 \(\sum\limits_{k=1}^{c}\dbinom{c+2}{k+2}f(i-1,c-k)=(c+2)!\sum\limits_{k=1}^{c}\dfrac{1}{(k+2)!}·(c-k)!f(i-1,c-k)\),令 \(F(x)=\sum_{k\ge 1}\dfrac{x^k}{(k+2)!},G(x)=\sum_k k!f(i-1,k)x^k\),计算 \(FG\) 即可快速转移,用 NTT 可以做到 \(O(mn\log n)\)

AGC020F. Arcs on a Circle

考虑到环上的问题非常难求解,不妨考虑将所有旋转同构的情况看作一种,那么考虑找到一个最长的线段,这样这条线段不会被其他线段完全覆盖,我们从其的左端点处断环为链然后进行求解。在环上,我们不难考虑到 dp:设 \(f(i,S,l)\) 表示所有起点 \(\le i\) 的线段的状态(除最长线段外)为 \(S\),并且最远覆盖到 \(l\) 的方案数,最后除以总方案数即为概率。然而线段的端点可以是实数让我们很苦恼,有一个 naive 的想法是将每一个单位长度看作 \(k\) 格,这样周长为 \(C\) 的环上就有 \(m=kC\) 个格子,我们可以在这些格子上进行 dp。转移可以考虑枚举起点为 \(i\) 的没有考虑过的线段尝试更新 \(l\),为了不重复统计,我们可以将线段从小到大枚举,这样便没有问题,复杂度可以做到 \(O(n2^nm^2)\),答案即为 \(\dfrac{f(m,2^n-1,m)}{m^{n-1}}\)

然而考虑到精度和时间不可兼得,我们无法得到一个合适的 \(m\) 能够让我们通过本题,不妨考虑换一种思路,也就是考虑我们本质打算求得在 \(m\) 趋近于 \(+\infty\)\(\dfrac{f(m,2^n-1,m)}{m^{n-1}}\) 的值。我们可以猜测 \(f(m,2^n-1,m)\) 是一个关于 \(m\)\(n-1\) 次多项式,因为如果其有更高次项那么这个答案在 \(m\) 趋近于 \(+\infty\) 时显然也趋近于 \(+\infty\),这显然不符合概率的条件。而如果最高次项不为 \(n-1\),则这个式子的值应当趋近于 \(0\),这显然也不合理。于是我们可以推出答案应该是 \(f\)\(n-1\) 次项系数,代入 \(n\)\(m\) 后用拉格朗日插值求出函数 \(f\)\(n-1\) 次项系数即可,复杂度是 \(O(n^42^nC^2)\) 的。

LG8340. [AHOI2022] 山河重整

回忆经典结论,我们可以得到这个集合合法当且仅当对于任何 \(i\),集合中 \(<i\) 的数字的和 \(\ge i-1\),那么可以简单写出一个 \(O(n^2)\) 的算法:设 \(f(i,s)\) 表示所有 \(\le i\) 的数的和为 \(s\) 的方案数,转移可以枚举之前合法的所有 \(s\),直接转移即可,注意 \(s\)\(n\)\(\min\)

然而这样做没有优化空间,考虑进行容斥。我们枚举第一个不合法的位置,也就是不能被表示出的位置 \(p\),然后统计所有第一个不合法位置为 \(p\) 的序列个数,显然这要求 \([1,p-1]\) 中的所有数都能被表示出来而 \(p\) 不能,说明 \(p-1\) 中的所有数的和 \(< p\)(注意我们强制不选 \(p\)),又因为 \(p-1\) 能表示出来,所以 \([1,p-1]\) 中的所有数的和应该是 \(p-1\)。设 \(f(i)\) 表示 \([1,i]\) 中的所有数都能被表示,且所有选择数字的和为 \(i\) 的方案数,那么答案即为 \(2^n-\sum\limits_{i=0}^{n-1}2^{n-i-1}f(i)\)

数字和为 \(i\) 是容易限制的:考虑互异拆分数的个数是 \(O(\sqrt{n})\) 的,那么我们可以转而枚举有多少个数 \(\ge i\),然后可以用完全背包维护,因为一个数只能出现一遍,所以 \(\ge i\) 的数的个数不会超过 \(>i\) 的数的个数加一,那么从总个数开始的每个数都会出现至少一遍,需要特判。复杂度是 \(O(n\sqrt{n})\) 的。

然而这样没有办法限制 \([1,i]\) 中的数字都能被表示,不妨继续考虑容斥,称上面我们求出的 \(i\) 的互异拆分数的方案为 \(g(i)\),考虑枚举前面第一个不能被表示出的数字 \(p\),则 \([1,p-1]\) 都能被表示且 \(p\) 不能被表示,方案数也就是 \(f(p-1)\),接着要求 \([p+1,i]\) 中的所有数字的和为 \(i-p+1\),这样才保证 \([1,i]\) 中所有数字的和为 \(i\),设这个内容的贡献为 \(k(i,p)\),那么可以得到 \(f(i)=g(i)-\sum\limits_{p=0}^{i-1}k(i,p)f(p)\)。对于 \(k\) 的维护我们可以仿照 \(g\) 的维护:考虑 \([p+1,i]\) 中选择的数字有 \(c\) 个且和为 \(i-p\) 相当于 \([1,i-p]\) 中选择 \(c\) 个数字且和为 \(i-c-(c+1)(p-1)\),假设这个和为 \(\sum\),那么 \(i=\sum+c+(c+1)(p-1)\),也就是这样的内容最后会贡献到 \(i\)。我们在确定第一列的长度,也就是选择数的个数时,可以枚举 \(p-1\),从而我们可以提前加入后面 \(c+(c+1)(p-1)\) 的部分,也就是将 \(f(p-1)\) 贡献到 \(c+(c+2)(p-1)\) 的位置,接着 dp 即可。总复杂度时 \(O(n\sqrt{n})\)

LG8322.『JROI-4』少女幻葬

考虑 dp,设 \(f(i,d,t)\) 表示前 \(i\) 个数已经确定,\(\gcd(a_i,a_{i+1})=d,a_i=td\) 的方案数,\(g(i,d,t)\) 表示前 \(i\) 个数已经确定,\(\gcd(a_i,a_{i-1})=d,a_i=td\) 的方案数。那么有两种转移:

  1. \(f\to g\),此时有转移方程

    \[g(i,d,t)=\sum_{t'}\left[\gcd(t,t')=1\right]f(i-1,d,t') \]

    可以考虑进行反演,那么有

    \[\begin{aligned}g(i,d,t)&=\sum_{t'}\sum_{d'\mid t,d'\mid t'}\mu(d')f(i-1,d,t')\\&=\sum_{d'\mid t}\mu(d')\sum_{d'\mid t'}f(i-1,d,d')\end{aligned} \]

    由此看出先对 \(f\) 进行狄利克雷后缀和,然后与 \(\mu\) 相乘,最后再进行狄利克雷前缀和即可,复杂度是 \(O(nm\log m\log\log m)\) 的。

  2. \(g\to f\),此时有转移方程

    \[f(i,d,t)=\sum_{d'\mid t}[\gcd(d,d')=1]g(i,d',t) \]

    此时不能直接反演,考虑 \(\gcd(d,d')=1\) 意味着其没有相同的质因子,那么每一个约数的答案就是其对应的补集的所有子集对应的贡献和,对所有约数对应的质因子集合进行高维前缀和求解即可。复杂度是 \(O(nm\log m+m\sum\limits_{i=1}^{m}\omega(i)2^{\omega(i)})\),后半部分内容在 \(m=5000\) 时只有 \(9\times 10^4\) 左右,因此可以通过。

转移的初始值是 \(g(1,d,t)=[d\mid t]\),答案为 \(\sum\limits_{d\mid t}f(n,d,t)\)

CF868G. El Toll Caves

考虑到每个洞穴是本质相同且有宝藏的概率均等,那么我们的最优策略应该就是尽可能均匀的尝试所有位置,于是不难给出一个最优策略:将所有 \(n\) 个洞穴排成一个环,每次依次选环上相邻的 \(k\) 个点。这样之后不难看出每 \(\gcd(n,k)\) 个点是本质相同的可以去掉,因此我们将 \(n,k\) 均除以 \(\gcd(n,k)\) 后处理即可。

考虑将 \(n\) 个洞穴依次编号为 \(0\sim n-1\),设 \(f_i\) 表示宝藏在 \(i\) 号洞穴时找到的期望天数,那么答案即为 \(\dfrac{\sum f_i}{n}\)。考虑转移:对于 \(k\le i<n\),在每一次查询这个洞穴之前,一定查询过 \(i-k\) 号洞穴,那么有 \(f_{i}=f_{i-k}+1\),而对于 \(0\le i<k\),第一次有 \(\dfrac{1}{2}\) 的概率直接找到,否则每一次在其之前,一定查询过 \(i+n-k\) 号洞穴,那么有 \(f_{i}=\dfrac{1}{2}+\dfrac{1}{2}(f_{i+n-k}+1)=\dfrac{1}{2}f_{i+n-k}+1\)

考虑到 \(ik\)\(\bmod n\) 意义下可以遍历到 \(0\sim n-1\) 的所有数,那么我们以 \(f_0\) 为未知数,可以按照转移得出 \(f_i=k_if_0+b_i\) 的形式,那么最后又会得到 \(f_0=k_0f_0+b_0\),于是可以解得 \(f_0=-\dfrac{b_0}{k_0-1}\),接着依次回代可以得到 \(\sum f_i\) 的值,可以在 \(O(n)\) 的复杂度内求出答案。

考虑万能欧几里得算法,每次增加 \(k\),对于多项式 \(f_i\) 我们都会 \(+1\),每增加超过 \(n\) 我们会 \(\times\dfrac{1}{2}\)。不妨对于线段 \(y=\dfrac{kx}{n}(0<x\le n)\) 进行求解,同时维护 \(f_i,\sum f_i\) 两个内容 \(\left(A(x),B(x)\right)\)。于是对于 \(x=i\),有 \(f_{ik\bmod n}=A(f_0)\),这样最后可以直接得出 \(f_0\)\(\sum f_i\)。同时不难得出有 \(U=\left(\dfrac{1}{2}x,0\right),R=\left(x+1,x+1\right),\left(A(x),B(x)\right)·\left(C(x),D(x)\right)=\left(C(A(x)),B(x)+D(A(x))\right)\),按照万能欧几里得直接求解即可,复杂度是 \(O(\log n)\) 的。

posted @ 2025-04-23 08:35  DycIsMyName  阅读(32)  评论(0)    收藏  举报