zoukankan      html  css  js  c++  java
  • [国家集训队]礼物

    洛咕

    题意:求(C_n^{w_1}*C_{n-w_1}^{w_2}*...*C_{n-w_1-...-w_{m-1}}^{w_{m}} mod p),其中(p=p_1^{c_1}p_2^{c_2}...p_k^{c_k})

    分析:扩展卢卡斯模板题.注意一下如果(sum_{i=1}^mw_i>n),则无解

    #include<bits/stdc++.h>
    #define LL long long
    #define rg register
    using namespace std;
    inline int read(){
        int s=0,w=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
        return s*w;
    }
    int w[10];
    inline LL ksm(LL a,LL b,LL c){
        rg LL cnt=1;
        while(b){
    		if(b&1)cnt=(1ll*cnt*a)%c;
    		a=(1ll*a*a)%c;
    		b>>=1;
        }
        return cnt;
    }
    inline void exgcd(LL a,LL b,LL &x,LL &y){
        if(!b){x=1;y=0;return;}
        exgcd(b,a%b,y,x);y-=(a/b)*x;
    }
    inline LL inv(LL a,LL b){
        rg LL x,y;exgcd(a,b,x,y);
        return (x%b+b)%b;
    }
    inline LL CRT(LL x,LL p,LL mod){return inv(p/mod,mod)*(p/mod)*x;}
    inline LL fac(LL x,LL a,LL b){
        if(x==0)return 1;rg LL ans=1;
        for(rg int i=1;i<=b;i++)
        	if(i%a)ans*=i,ans%=b;
        ans=ksm(ans,x/b,b);
        for(rg int i=1;i<=x%b;i++)
        	if(i%a)ans*=i,ans%=b;
        return (1ll*ans*fac(x/a,a,b))%b;
    }
    inline LL C(LL n,LL m,LL a,LL b){
        if(n<m)return 0;
        rg LL N=fac(n,a,b),M=fac(m,a,b),NM=fac(n-m,a,b),sum=0;
        for(rg int i=n;i;i/=a)sum+=i/a;
        for(rg int i=m;i;i/=a)sum-=i/a;
        for(rg int i=n-m;i;i/=a)sum-=i/a;
        return 1ll*(N*ksm(a,sum,b))%b*(inv(M,b)*inv(NM,b))%b;
    }
    int main(){
        rg LL p=read(),n=read(),m=read(),sum=0;
        for(int i=1;i<=m;i++)w[i]=read(),sum+=w[i];
        if(sum>n){puts("Impossible");return 0;}
        rg LL N=n,ans=1;
        for(int i=1;i<=m;i++){
    		rg LL M=p,now=0;
    		for(int j=2;j*j<=p;j++){
    	    	rg LL tot=1;
    	    	while(M%j==0)tot*=j,M/=j;
    	    	now+=CRT(C(N,w[i],j,tot),p,tot),now%=p;
    		}
    		if(M>1)now+=CRT(C(N,w[i],M,M),p,M),now%=p;
    		ans*=now;ans%=p;
    		N-=w[i];
        }
        printf("%lld
    ",ans);
        return 0;
    }
    
    
  • 相关阅读:
    leetcode33. Search in Rotated Sorted Array
    pycharm 设置sublime text3 monokai主题
    django class Meta
    leetcode30, Substring With Concatenation Of All Words
    Sublime text3修改tab键为缩进为四个空格,
    sublime text3 python打开图像的问题
    安装上imesupport输入法依然不跟随的解决办法,
    sublime text3 的插件冲突弃用问题,
    sublime text3 BracketHighlighter括号匹配的设置
    windows 下wget的使用
  • 原文地址:https://www.cnblogs.com/PPXppx/p/10828350.html
Copyright © 2011-2022 走看看