union
Posted andromeda-galaxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了union相关的知识,希望对你有一定的参考价值。
#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的主要内容,如果未能解决你的问题,请参考以下文章