AtCoder 上的新比赛 FPS 24: 24 Problems on Formal Power Series,断断续续做了几天终于是把 W 之外的题做完了(疯狂开白是吧),发一下个人题解(
A. Snack
答案:\([x^N](x+x^3+x^4+x^6)^D\) .
B. Tuple of Integers
答案:\([x^N]\dfrac{(1+x)(1+x+x^2)}{(1-x^2)(1-x^3)}\) .
C. Sequence
答案:\([x^S]\left(\dfrac{1-x^{M+1}}{1-x}\right)^N\) .
D. Sequence 2
分别讨论第一位是奇数还是偶数,然后计算不降的奇数 / 偶数序列数量,在第 \(i\) 位加 \(i\) 后即可转换为原问题 .
答案:\(N!\left(\dbinom{\lfloor(M-N+1)/2\rfloor+N-1}N+\dbinom{\lfloor(M+1-N+1)/2\rfloor+N-1}N\right)\) .
E. Sequence 3
答案:\(\displaystyle\left[\dfrac{x^N}{N!}\right]\prod_{k=1}^M\sum_{i=0}^k\dfrac{x^i}{i!}\)(暴力计算即可).
F. Colored Paper
答案:\(\left[\dfrac{x^N}{N!}\right]\mathrm e^x\left(\dfrac{\mathrm e^x+\mathrm e^{-x}}2\right)\left(\dfrac{\mathrm e^x-\mathrm e^{-x}}2\right)=\dfrac{3^N-(-1)^N}4\) .
G. Coin
用退背包的技术做就可以了,看起来和 FPS 并没有什么关系 .
H. Jump
对朴素 DP 按列建立生成函数,则可以写出迭代列:
其中 \(F_0(x)=\dfrac1{1-x},\,S_0(x)=\dfrac{1+x}{1-x}\) .
答案:\([x^N]F_M(x)=2^{M-1}[x^N]\dfrac{1+x}{(1-x)^{M+1}}\) .
I. Score
答案:\(\displaystyle[x^K]\prod_{i=1}^N(1+A_ix)\),可以分治乘出来 .
J. Sugoroku
使用半在线卷积快速完成朴素 DP 即可(我没写).
K. Permutation
容斥,钦定一些限制不满足,那么会把排列划分成若干段,每段独立选择 .
答案:\([x^N]-\dfrac1{1-\sum_{i\ge1}-i!x^i}\) .
L. Permutation 2
答案:\([x^N]\exp(-\ln(1-x)-x-x^2/2)\) .
M. Connected Graph
答案:\(\displaystyle[x^N]\ln\sum_{i\ge0}2^{\binom i2}\dfrac{x^i}{i!}\) .
N. Coin 2
答案:\(\displaystyle[x^N]\prod_{i=1}^N\dfrac{1-x^{i(A_i+1)}}{1-x^i}\),使用 ln-exp 技巧计算即可 .
O. Rooted Tree
\(F(x)\) 是答案的 EGF,则可以写出:
施 Lagrange 反演,
那么答案就是 \(\dfrac1N\left[\dfrac{x^N}{N!}\right]F(x)\)(由于根要求是 1 所以需要乘 \(\frac1N\)).
答案:\(\displaystyle\dfrac{(N-1)!}{N}[x^{N-1}]\left(1+\sum_{p\in\mathbb P}\dfrac{x^p}{p!}\right)^N\) .
P. Ball
答案:\(\displaystyle\sum_{k=0}^K\dbinom Nkm^{N-k}\),可以使用多点求值计算 .
Q. Dice
对于每个随机变量 \(X\) 都求一下 \(\mathbb E[X^k]\) 关于 \(k\) 的 EGF,合并只需要把两个 EGF 相乘 .
关于这个 EGF 怎么求,不妨设求骰子 1,根据熟知结论只需要对 PGF 复合 \(\mathrm e^x\):
施形式 Laplace 变换,
可以分治乘算出!
R. Random Walk
这是一个另一种反射容斥的题目 .
答案:\(\dfrac1{2^{T-[X\neq 1\land X\neq2^N+1]}}[z^{X-1}]((z+z^{-1})^T\bmod(z^{2^{N+1}}-1))\),模二的幂的循环卷积可以借助 FFT 简单计算 .
S. Game
Subtask 1. \(\mathrm{type}=1\)
改成有根树做,令 Alice, Bob 赢的有根树的 GF 是 \(A(x),B(x)\),则(注意这个部分相当于 Bob 是先手):
整理可得 \(A(x)=\left(\dfrac{x}{\exp(x\exp x-x)}\right)^{\langle-1\rangle}\),接下来得到答案比较简单就不写了 .
Subtask 2. \(\mathrm{type}=2\)
注意到后手必胜当且仅当树存在完美匹配,由于树如果有完美匹配那么一定唯一,所以先随意选一些匹配然后使用扩展 Cayley 公式连成树就可以了 .
T. Colorful
改成算所有以 1 开始以 1 结束的长度为 \(T+1\) 的相邻不相同的序列 \(p\) 的 \(\prod_{i=2}^T A_{p_i}\) 之和 . 使用集合划分容斥,令颜色 \(i\) 构成的长度为 \(k\) 的颜色段的容斥系数为 \(p_k\),其 OGF 为 \(p_i(x)\),则有:
进而可以组合出答案:\(\displaystyle [x^{T+1}]\dfrac{1}{1-\sum_{i=1}^N\frac{A_ix}{1+A_ix}}\left(\dfrac x{1+A_1x}\right)^2+(-1)^TA_1^{T-1}\) .
U. Recorder
其实感觉 DP 不是很简单啊,顺着扫依次填扫到的左 / 右端点,要求左端点填了但右端点没填的个数随时 \(\le 2\),那么可以写出一个线性递推形状的转移 . 最后答案是关于两个输入的二元有理分式,其一行必然是常数阶 D-Finite 的,想办法算一些值之后 Gauss 消元解出就可以了(注意此处用朴素 DP 是算不出初值的因为前面固定有 \(\lceil\frac N2\rceil\) 个 0).
技术细节(过于暴力,未成年人请在成年人陪同下观看):
首先偷看鱼鱼题解发现答案除以 \(N!\) 之后就是
考虑乘 \(\frac1{t^{\lceil N/2\rceil}}\) 之后通过常见手段算截断后的答案,分奇偶性讨论:
- \(N=2n\),\[\small\mathrm{ans}=\dfrac{(\sqrt t-\sqrt{2+5t+2t^2})\Big(\frac{1+7t+t^2-3\sqrt{t(2+5t+2t^2)}}{(t-1)^4}\Big)^n-(\sqrt t+\sqrt{2+5t+2t^2})\Big(\frac{1+7t+t^2+3\sqrt{t(2+5t+2t^2)}}{(t-1)^4}\Big)^n}{2^{n+1}(t-1)\sqrt{(2+5t+2t^2)}} \]此处需要手动维护 \(t^{k+1/2}\) 次项(可以写成维护 \(a+b\sqrt t\)).
- \(N=2n+1\),\[\small\mathrm{ans}=\dfrac{(1+t+t^2-\sqrt{t(2+5t+2t^2)})\Big(\frac{1+7t+t^2-3\sqrt{t(2+5t+2t^2)}}{(t-1)^4}\Big)^n-(1+t+t^2+\sqrt{t(2+5t+2t^2)})\Big(\frac{1+7t+t^2+3\sqrt{t(2+5t+2t^2)}}{(t-1)^4}\Big)^n}{2^{n+1}(t-1)^3\sqrt{t(2+5t+2t^2)}} \]此处也手动维护 \(t^{k+1/2}\) 次项,不过由于求逆的困难可以求答案乘 \(\sqrt t\) 后的值然后最后再除掉 .
这样就解决了 .
V. 12 Directions
首先将任意时刻的坐标表示为 \((\frac{a+\sqrt 3b}2,\frac{c+\sqrt3d}2)\),则可以简单写出答案:
对于两个部分中单独的一部分,通过一些直觉可以发现是常数阶 D-Finite 的,那么只需要想办法求前面一些位置的值然后 Gauss 消元解出整式递推(下面是个人办法,更简单的办法见后折叠框).
(其中非整数下标的二项式系数都为 0)
这样借助一些预处理就可以 \(O(k^2)\) 算前 \(k\) 个值了,从而可以解决原问题 .
为什么 D-Finite?
这部分推导来自 hos_lyric(的代码里的注释).
回到这一步:
由于 -2 对 D-Finite 性质不是很重要所以就去掉,然后平面转 \(45^\circ\) 使得两个方向的移动独立:
由于这是超几何函数,所以一定是 D-Finite 的,从而给出了原式的 D-Finite 性 .
W. Cycle
由于是集合幂级数所以肯定是不会做的
X. Functional Square Root
飞雨烟雁老师在一些幂级数复合方程的解法已经给出了详细的说明 .
另外 hos_lyric 指出只需要算 \(F\) 复合自己 \(\frac{p-1}2\) 次就可以得到答案,从而引出了一个更简洁的算法(