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加空格的...

转载于:https://www.cnblogs.com/VisJiao/p/BZOJ3028.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值