RE了QAQMnZn求条
查看原帖
RE了QAQMnZn求条
572587
cmrhhh楼主2024/4/5 15:49
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN=30,mod=1e9+7;
int n,f[MAXN+5],s; 
int fac[MAXN+5],inv[MAXN+5];
int ans;
int qpow(int a,int b){
	int res=1;
	while(b){
		if(b&1)res=res*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return res%mod;
}
void init(){
	fac[0]=1;
	for(int i=1;i<=MAXN;++i)fac[i]=fac[i-1]*i%mod;
	inv[MAXN]=qpow(fac[MAXN],mod-2);
	for(int i=MAXN-1;i>=0;i--)inv[i]=inv[i+1]%mod*(i+1)%mod;//0的也要 
}
int C(int a,int b){
	if(a<0||b<0||a<b)return 0;
	a%=mod;b%=mod;//Lucas
	if(a==0||b==0)return 1;
	return 1ll*fac[a]%mod*inv[b]%mod*inv[a-b]%mod;
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0);
	init();
	cin>>n>>s;
	for(int i=1;i<=n;++i)cin>>f[i];
	for(int i=0;i<1<<n;++i){
		int p=0;
		if(i==0)
			ans=(ans+C(n+s-1,n-1))%mod;
		else {
			int t=n+s;
			for(int j=0;j<n;++j)if(i>>j&1)++p,t-=f[j+1];
			if(p&1)ans=(ans-C(t-p-1,n-1)+mod)%mod;
			else ans=(ans+C(t-p-1,n-1))%mod;
		}	
	}
	cout<<ans;
	return 0;
} 
2024/4/5 15:49
加载中...