「loj - 3120」「CTS2019 | CTSC2019」珍珠
时隔大约一年回来再做一遍。
看到自己当初用的是二项式反演,然后 ODE 的解法看起来非常构造(大概只是我不熟悉)。
气抖冷,难道平凡推导就推不出来吗!(也有可能我没搜到相关的)
推得出来的都不平凡。
前排提醒:如果没写明取值范围则默认取所有有意义的值。
先用集合幂级数或者 EGF 推,得到:
以下记 \(l = n - 2m\),并假设 \(l\in[0, D)\)(当 \(l < 0\) 或 \(l \geq D\) 时是平凡的)。
注意到求和式中最硬的其实是 \((D - 2i - 2j)^n\),因为 \(n\) 非常大,只能将其看成一个整体而不能展开。
因此以下再记 \(s = i + j\),则 \(j = s - i\)。原式化简成(省略 \(\frac{1}{2^D}\) 的系数):
注意到后面的组合数可以消成 \(\frac{D!}{i!(k-i)!(s-i)!(D-k-s+i)!}\)。其中 \(k\) 只出现在两项中,因此可以变成:
这里有 \(\sum_{k=0}^{l} (-1)^{k-i}\binom{s}{k-i} = (-1)^{l-i}\binom{s - 1}{l-i}\)。
原因是 \(\sum(-1)^{k-i}\binom{s}{k-i}x^{k-i} = (1 - x)^s\),求前缀和等价于乘以因子 \(\frac{1}{1 - x}\),得到 \((1 - x)^{s - 1}\)。
当然如果你乐意,可以用上指标反转 + 平行求和来证。只是要注意 edge case。
为了方便,我们特判 \(s = 0\) 的情况,得到:
这样只能得到 “对于所有 \(s\),求 \([x^l](1-x)^{s-1}(1+x)^{D-s}\)” 之类的结果,不太好做。考虑再消组合数:
就变成了求 “对于所有 \(s\),求 \([x^{s-1}](1-x)^l(1+x)^{D-l-1}\)”,至少可以 fft 了。
考虑 \(F = (1 - x)^l(1 + x)^{D - l - 1}\) 可否用 ODE 来递推。发现 \(F' = (-l)\times\frac{F}{1-x} + (D - l - 1)\frac{F}{1+x}\)。
瓶颈卡在求 \((D - 2s)^n\),可以线性筛做到 \(O(\frac{D}{\ln D}\times \log n) = O(\log_D n)\)。
你怎么写得还没 fft 快,丢人.jpg。
如果想知道更简单的推导方法,可以参考 https://codeforces.com/blog/entry/76447 中的最后一个。
难道用二项式反演就不能 ODE 递推吗!气抖冷!
貌似是可以的,注意到这里的二项式反演实际上就是复合 \(F(x - 1)\),复合之前 d-finite,复合之后自然也 d-finite。
没认真推过,推不出来别找我(