zoukankan      html  css  js  c++  java
  • BZOJ3028

    Portal

    Description

    求满足(x_1+x_2+x_3+x_4+x_5+x_6+x_7+x_8=n(nleq10^{500}))的方案数,对(10007)取模。其中(2|x_1)(x_2in{0,1})(x_3in{0,1,2})(2|x_4-1)(4|x_5)(x_6in{0,1,2,3})(x_7in{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)
    这道题就是一个多重集组合的裸题。列出每个变量所在集合的生成函数:

    [egin{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}inom{-4}{i-1} x^i $$$$egin{align*} ans &= (-1)^{n-1} inom{-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)!} \ &= inom{n+2}{n-1} \ &= inom{n+2}{3} \ &equiv inom{⌊frac{n+2}{P}⌋}{0}inom{(n+2)mod P}{3} &pmod P \ &equiv inom{(n+2)mod 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
    ",ans%P);
    }
    

    P.S.

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

  • 相关阅读:
    Response.AppendHeader使用大全
    JS获取父框架的内容:获取子框架的内容:js框架应用
    各种好用的代码生成器
    Centos 64位上搭建Android
    WinForm 多线程
    GAC及其作用
    WPF 详解模板
    WPF控件开发基础(1)
    WPF:从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转
    告诫
  • 原文地址:https://www.cnblogs.com/VisJiao/p/BZOJ3028.html
Copyright © 2011-2022 走看看