「2013 TCO Algorithm Round 3A - Division I, Level Three」 TrickyInequality
以下记 \(r = m - n\),有 \(1 \leq r \leq 100\)。
易知答案为(注意有条件 \(nt \leq s\)):
如果记 \(f(i) = \binom{s - it}{m}\),则答案为 \((-1)^n \Delta^n f(0)\),其中 \(\Delta^n f\) 为 \(f\) 的 \(n\) 阶差分。
我们知道如下事实:\(f(x) = \sum_{i=0}\Delta^if(0)\binom{x}{i}\)(被称为“牛顿级数”)。那么只需将 \(f(x)\) 写成下降幂多项式,并取第 \(n\) 项。
先展开成多项式:
再展成下降幂:
取 \(k = n\),得:
发现都可以 \(O(r^2)\) 求。
这里补充一下怎么 \(O(r^2)\) 预处理,\(O(k)\) 求 \({n\brack n - k},{n\brace n - k},k\leq r\)
(经过一些挣扎,我决定上组合意义了)。考虑 \({n\brace n - k}\) 的组合意义,将 \(n\) 个元素分入 \(n - k\) 个集合。可以发现大多数集合都只包含一个元素。
记 \(f_{p, q}\) 表示将 \(p\) 个元素分入 \(q\) 个集合,每个集合含多于一个元素。显然 \(p \geq 2q\)。
\[{n\brace n - k} = \sum_{p=0}^{k} \binom{n}{k + p}f_{k + p, p} \]现在考虑求 \(f_{p, q}\)。类似第二类斯特林数,有 \(f_{p, q} = qf_{p - 1, q} + (p - 1)f_{p - 2, q - 1}\)。
\({n\brack n - k}\) 同理,不再赘述。
自然,你也可以根据斯特林数的列生成函数跑多项式幂,用 exp + ln 即可同复杂度。
另一个 \(O(r^2)\) 的做法。把答案写作生成函数:
记 \(G(x) = \frac{x(1-x^t)}{1-x} = x + \dots + x^t, F(x) = G^n(x), H(x) = \left(\frac{x}{1-x}\right)^{r}\frac{1}{1-x}\)。
易知 \(H(x) = \sum_{i=0}\binom{i}{r}x^i\),此时答案为 \(\sum_{i=0}f_i\binom{s-i}{r}\)
将其写成下降幂 \(\binom{s-i}{r} = \sum_{j=0}^r a_j i^{\underline{j}}\),此时答案又可写作 \(\sum_{j=0}^{r}a_jF^{(j)}(1)\)。
现只需考虑求出 \(F^{(k)}(1) = (G^n)^{(k)}(1), \forall k\leq r\)。
注意到 \(G^{(k)}(1) = \binom{t + 1}{k + 1}\) 是易求的,考虑由此得到 \(F^{(k)}(1)\)。
根据乘法的求导法则,有 \(F^{(k)}(1) = k![x^k]\left(\sum_{i=0}\frac{G^{(i)}(1)}{i!}x^i\right)^n\)。之后做一个 \(O(r^2)\) 的多项式幂(ln + exp)即可。
我个人认为以上两种方法是等价的,但是我水平太菜证不动。