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

bzoj 4710

时间:2018-02-05 12:34:08      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:turn   pos   deb   long   etc   std   const   cin   include   

枚举几个同学分到了

对于每种特产求一个方案数(经典做法)乘起来

然后容斥

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a),i##_end=(b);i<=i##_end;++i)
#define For(i,a,b) for(int i=(a),i##_end=(b);i<i##_end;++i)
#define per(i,a,b) for(int i=(b),i##_st=(a);i>=i##_st;--i)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define dbg(x) cerr<<#x" = "<<x<<endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define Es(x,i) for(Edge *i=G[x];i;i=i->nxt)
typedef long long ll;
typedef pair<int,int> pii;
const int inf=~0u>>1,mod=1e9+7;
inline int rd() {
    int x,c,f=1;while(!isdigit(c=getchar()))f=c!=‘-‘;x=c-‘0‘;
    while(isdigit(c=getchar()))x=x*10+c-‘0‘;return f?x:-x;
}
inline int pw(int n,int m){int r=1;for(;m;m>>=1,n=(ll)n*n%mod)if(m&1)r=(ll)r*n%mod;return r;}
const int N=1011,M=2*N;
int fac[M],fai[M];
inline void init(){
	fac[0]=1;
	For(i,1,M)fac[i]=(ll)fac[i-1]*i%mod;
	fai[M-1]=pw(fac[M-1],mod-2);
	per(i,1,M-1)fai[i-1]=(ll)fai[i]*i%mod;
}
inline int C(int n,int m){return n<m?0:(ll)fac[n]*fai[m]%mod*fai[n-m]%mod;} 
int m,n,a[N];
inline int Cal(int n){
	int r=1;
	rep(i,1,m){
		r=(ll)r*C(a[i]+n-1,n-1)%mod;
	}
	return r;
}
int main(){
#ifdef flukehn
	freopen("test.txt","r",stdin);
#endif
	init();
	//while(cin>>n>>m)cout<<C(n,m)<<endl;
	n=rd(),m=rd();
	rep(i,1,m)a[i]=rd();
	ll ans=Cal(n);
	For(i,1,n)ans+=((n-i&1)?-1:1)*(ll)Cal(i)*C(n,i)%mod;
	ans=(ans%mod+mod)%mod;
	cout<<ans<<endl;
}

  

bzoj 4710

标签:turn   pos   deb   long   etc   std   const   cin   include   

原文地址:https://www.cnblogs.com/limfc/p/8416657.html

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