BZOJ3028 - 食物

Portal

Description

求满足\(x_1+x_2+x_3+x_4+x_5+x_6+x_7+x_8=n(n\leq10^{500})\)的方案数,对\(10007\)取模。其中\(2|x_1\)\(x_2\in\{0,1\}\)\(x_3\in\{0,1,2\}\)\(2|x_4-1\)\(4|x_5\)\(x_6\in\{0,1,2,3\}\)\(x_7\in\{0,1\}\)\(3|x_8\)\(x_{1..8}\geq0\)

Solution

生成函数(generation function),多用于解决多重集的组合问题。一个多重集\(S\)对应一个数列\(\{a_k\}\),其中\(k\)\(S\)的类别数,\(a_i\)等于\(i\)\(S\)中的重数:那么多重集\(S\)的生成函数\(g(x)=\sum_{i=0}^{+\infty}a_ix^i\)
这道题就是一个多重集组合的裸题。列出每个变量所在集合的生成函数:

\[\begin{align*} g_1(x) &= 1+x^2+x^4+x^6+... = (1-x^2)^{-1} \\ g_2(x) &= 1+x \\ g_3(x) &= 1+x+x^2 \\ g_4(x) &= x+x^3+x^5+x^7+... = (1-x^2)^{-1} \\ g_5(x) &= 1+x^4+x^8+x^{12}+... = (1-x_4)^{-1} \\ g_6(x) &= 1+x+x^2+x^3 \\ g_7(x) &= 1+x \\ g_8(x) &= 1+x^3+x^6+x^9+... = (1-x^3)^{-1} \end{align*}$$相乘得到$G(x)=x(1-x)^{-4}$,其中$x^n$项的系数,就是和为$n$的方案数。依二项式定理展开,得到 $$ G(x)=\sum_{i=1}^{+\infty} (-1)^{i-1}\binom{-4}{i-1} x^i $$$$\begin{align*} ans &= (-1)^{n-1} \binom{-4}{n-1} \\ &= (-1)^{n-1} \frac{\prod_{i=0}^{n-2}(-4-i)}{(n-1)!} \\ &= \frac{\prod_{i=0}^{n-2}(4+i)}{(n-1)!} \\ &= \frac{\prod_{i=0}^{n-2}(4+(n-2)-i)}{(n-1)!} \\ &= \binom{n+2}{n-1} \\ &= \binom{n+2}{3} \\ &\equiv \binom{⌊\frac{n+2}{P}⌋}{0}\binom{(n+2)\bmod P}{3} &\pmod P \\ &\equiv \binom{(n+2)\bmod P}{3} &\pmod P \end{align*}\]

时间复杂度\(O(1)\)(不包括读入)。

Code

//食物
#include <cstdio>
int const P=10007;
char n0[600];
int main()
{
    scanf("%s",n0+1); int n=0;
    for(int i=1;n0[i];i++) n=(n*10+n0[i]-'0')%P;
    int ans=(n+2)*(n+1)%P*n%P*1668%P;
    printf("%d\n",ans%P);
}

P.S.

我错误地推导出\(\binom{-4}{n-1}=\binom{P-4}{(n-1)\bmod P}\),但仍然A掉了这道题...感谢sbw巨佬
发现LaTeX代码\bmod\pmodx \bmod y\(x \bmod y\)\pmod p\(\pmod p\)。以前都是打mod加空格的...

posted @ 2018-04-10 14:37  VisJiao  阅读(172)  评论(0编辑  收藏  举报