码迷,mamicode.com
首页 > 其他好文 > 详细

union

时间:2019-07-14 19:57:37      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:std   ||   ace   can   quic   span   code   i++   clu   

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
const int mod=1e9+7;
int A[maxn];
int B[maxn];
int quick(int x,int n){
    int ans=1;
    while(n){
        if(n&1) ans=1ll*ans*x%mod;
        x=1ll*x*x%mod;
        n=n/2;
    } return ans;
}
void make(){
    int n=maxn-1;
    A[0]=1; for(int i=1;i<=n;i++) A[i]=1ll*A[i-1]*i%mod;
    B[n]=quick(A[n],mod-2);
    B[0]=1; for(int i=n-1;i>=1;i--) B[i]=1ll*B[i+1]*(i+1)%mod;
}
int C(int n,int x){
    return 1ll*A[n]*B[x]%mod*B[n-x]%mod;
}
int main(){
    make();
    int n,k;  scanf("%d %d",&n,&k);
    int a1; scanf("%d",&a1);
    int a2; scanf("%d",&a2);
    int a3; scanf("%d",&a3);
    int a4; scanf("%d",&a4);
    int a5; scanf("%d",&a5);
    int a6; scanf("%d",&a6);
    int a7; scanf("%d",&a7);
    int tot=0;
    int ans=0;
    for(int x=a1;x<=k;x++){
        for(int y=a2;y<=k;y++){
            for(int z=a3;z<=k;z++){
                if(x+y+z!=k) continue;
                int w=min(min(x,y),z);
                for(int c=0;c<=w;c++){
                    int num=C(n,c);
                    int nn=n-c;
                    for(int d=0;d<=min(x,y)-c;d++){
                        for(int e=0;e<=min(y,z)-c;e++){
                            for(int f=0;f<=min(z,x)-c;f++){
                                    //tot++;
                                int pace = 1ll*num%mod*C(nn,d+e+f)%mod*C(d+e+f,d)%mod*C(e+f,f)%mod;
                                int nnn=nn-d-e-f;
                                int xx=x-c-d-f;
                                int yy=y-c-e-d;
                                int zz=z-c-f-e;
                                if(xx<0 || yy<0 || zz<0 ) continue;
                                int ans1=1ll*pace%mod*C(nnn,xx+yy+zz)%mod*C(xx+yy+zz,xx)%mod*C(yy+zz,zz);
                                if( d+e+f+xx+yy+c>=a4 && d+e+f+yy+zz+c>=a5 && d+f+e+zz+xx+c>=a6 && c+e+d+f+xx+yy+zz>=a7){
                                    ans+=ans1;
                                    ans=ans%mod;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    //cout<<tot<<endl;
    printf("%d\n",ans);
}

 

union

标签:std   ||   ace   can   quic   span   code   i++   clu   

原文地址:https://www.cnblogs.com/Andromeda-Galaxy/p/11185107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!