• xdoj-1149(多重集合+容斥原理+组合数取模)


    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    typedef long long LL;
    const LL N=2e6;// 题目太坑了 提交 1e6会莫名错误 
    const LL mod=1e9+7;
    LL f[N+7];
    LL inv_f[N+7];
    LL n,m,k;
    LL q_pow (LL x,LL k) {//快速幂求逆元
        LL ans=1;
        while (k) {
            if (k&1) ans=ans*x%mod;
            x=x*x%mod;
            k=(k>>1);
        }
        return ans%mod;
    }
    LL C (LL n, LL m) {// C(n,m)=n!/(m!*(n-m)!)
        if (n<m) return 0;
        LL t1=f[n];
        LL t2=inv_f[n-m]*inv_f[m]%mod;
        return t1*t2%mod;
    }
    int main ()
    {
        f[0]=1;
        for (int i=1;i<=N;i++) 
            f[i]=f[i-1]*i%mod;// f[n]=n!
        inv_f[N]=q_pow(f[N],mod-2);
        for (int i=N-1;i>=0;i--)
            inv_f[i]=inv_f[i+1]*(i+1)%mod; // inv_f[i]=1/(n!); (逆元)
        while (cin>>n>>m>>k) {
    
            LL ans=C (m+n-1,n-1);// 组合数学多重集合挑选元素
            LL t=-1; LL num=m-(k+1);
            for (int i=1;num>=0&&i<=n;i++,t=-t,num-=(k+1)) {
                    LL tmp=C(n,i)*C(num+n-1,n-1)%mod;// 容斥原理 
                    ans=(ans+t*tmp+mod)%mod;
            }
            cout<<ans<<endl; 
        }
        return 0;
    }
    抓住青春的尾巴。。。
  • 相关阅读:
    Python3连接MySQL
    jQuery
    Python之路--协程
    java面向对象练习题
    java基础语法4--封装,继承,多态
    java基础编程题
    java基础语法——方法,static关键字
    java基础语法3
    java基础语法2
    java基础语法1
  • 原文地址:https://www.cnblogs.com/xidian-mao/p/8473794.html
Copyright © 2020-2023  润新知