专栏文章

双射是什么,和我的 Kernel Method 说去吧

AT_toyota2023spring_final_e题解参与者 7已保存评论 6

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
6 条
当前快照
1 份
快照标识符
@ming49jq
此快照首次捕获于
2025/12/02 01:51
3 个月前
此快照最后确认于
2025/12/02 01:51
3 个月前
查看原文
首先我们对整个平面做线性变换:(x,y)(x,xy)(x,y) \to (x,x-y)。这样就变成了从 (0,0)(0,0) 移动到 (n,0)(n,0) 且不越过 y=0y=0 这条线,方便我们描述一些。
现在就有一个简单的 DP,给定 f0(z)=1f_0(z)=1,以及递推式 fk(z)=11zi=0kai(fki(1)zifki(z))f_k(z)=\frac{1}{1-z}\sum_{i=0}^k a_i (f_{k-i}(1)-z^i f_{k-i}(z))
(含义:如果 xx 选择走 aia_i 长度,那么第二维可以走到 y+ai1y+a_i-1 以内的任意自然数)
尝试求出 fn(0)f_n(0)。建立二元 GF 就有方程
(1z)F(z,t)=A(t)F(1,t)A(tz)F(z,t)+1z (1-z)F(z,t)=A(t) F(1,t)- A(tz)F(z,t)+1-z
由此也能得到
F(z,t)=A(t)F(1,t)+1z1z+A(tz)F(z,t) = \frac{A(t)F(1,t)+1-z}{1-z+A(tz)}
而我们知道 [zn+1]F(z,t)0(modtn+1)[z^{n+1}]F(z,t)\equiv 0 \pmod{t^{n+1}}(没法走到这么高),根据这一点可以解出 F(1,t)F(1,t)。设
gk(t)=[zk]11z+A(tz)g_k(t)=[z^k] \frac{1}{1-z+A(tz)}
F(0,t)A(t)F(1,t)+1gn(t)gn+1(t)(modtn+1)F(0,t)\equiv A(t)F(1,t)+1 \equiv \frac{g_n(t)}{g_{n+1}(t)} \pmod{t^{n+1}}
那么问题就变为如何快速计算 gk(t)g_k(t) 了...吗?直接计算 gk(t)g_k(t) 可能比较困难,如果能直接计算两项之比就好了。大家一定知道 Fibonacci 数相邻两项之比的极限吧:
limnfnfn+1=512\lim_{n \to \infty} \frac{f_n}{f_{n+1}}=\frac{\sqrt 5 - 1}{2}
它等于 fnf_n 递推式中,模长最大的特征根的倒数。显然 gn(t)/gn+1(t)g_n(t)/g_{n+1}(t) 的极限也是存在的,我们尝试用类似的方法处理。显然我们先验地知道这个极限的常数项为 11,且不存在负次项,这将给后续推导提供重要帮助。
考虑到特征方程 zn(1z1+A(t/z))z^n(1-z^{-1}+A(t/z)) 有多达 nn 个根难以处理,但既然 gn(t)/gn+1(t)g_n(t)/g_{n+1}(t) 的极限已经确定了最低非零项,那么我们只需要找出特征方程中也满足相同性质的那个根即可。
也就是说,我们要找一个形式幂级数 F(t)F(t),满足 F(0)=1F(0)=1,且
F(t)n(11/F(t)+A(t/F(t)))=0F(t)^n(1-1/F(t)+A(t/F(t)))=0
(很幸运,满足条件的 F(t)F(t) 是唯一的)
那么答案即为 [tn]1/F(t)[t^n]1/F(t)
稍微化简一下,设 G(t)=1/F(t)G(t)=1/F(t),则方程变为
1G(t)+A(tG(t))=01-G(t)+A(t G(t))=0
t=tG(t)tA(tG(t))t = tG(t) - t A(t G(t))
所求的答案也变为 [tn+1]tG(t)[t^{n+1}] tG(t)。令 H(t)H(t)tG(t)tG(t) 的复合逆,则 H(t)=tH(t)A(t)H(t)=t-H(t)A(t),答案也就是
[tn+1]tG(t)=1n+1[xn](tH(t))n+1=1n+1[tn](1+A(t))n+1[t^{n+1}] tG(t)=\frac{1}{n+1}[x^n] \left( \frac{t}{H(t)}\right)^{n+1}=\frac{1}{n+1}[t^n](1+A(t))^{n+1}
完全胜利!

评论

6 条评论,欢迎与作者交流。

正在加载评论...