被莫名卡爆
查看原帖
被莫名卡爆
137723
pencil楼主2021/11/22 13:25
#include<bits/stdc++.h>
//#include<map>
using namespace std;
typedef long long ll;
const ll mod=998244353;
int m,erdcl[101],n,clwz[101],a[101],sum;
ll read(){
	int x;
	scanf("%d",&x);
	return x;
}
ll power(int a,int b){
	ll base=a;
	ll ans=1;
	while(b){
		if(b&1){
			ans*=base;
			ans%=mod;
		}
		base*=base;
		base%=mod;
		b>>=1;
	}
	return ans; 
}
int C(int a,int b){
	ll ans=1,ans2=1;
	for(int i=2;i<=a;i++){
		ans*=i;
	}
	for(int i=2;i<=b;i++){
		ans2*=i;
//	ans/=i;
	}
	ans2=power(ans2%mod,mod-2)%mod;
	ans*=ans2;
	ans%=mod;
	ans2=1;
	for(int i=2;i<=a-b;i++){
		ans2*=i;
//	ans/=i;
	}
	ans2=power(ans2%mod,mod-2)%mod;
	ans*=ans2;
	ans%=mod;
	return ans;
}
int lowbit(int x){
	int sum=0;
	while(x){
		x&=x-1;
		sum++;
	}
	return sum;
}
bool xunwen(int val,int wz){
	if(wz>n){
		return (val==0);
	}
	for(int i=m;i>=0;i--){
		if(erdcl[i]<=val){
			clwz[wz]=i;
			if(xunwen(val-erdcl[i],wz+1)){
				return 1;
			}
//				break;
				
			
		}
	}
	return 0;
}
int main(){
//	freopen("sequence.in","r",stdin);
//	freopen("sequence.out","w",stdout);
	ll answ=0,cooh,k,qwq;
	n=read();
	m=read();
	k=read();
	for(int i=0;i<=m;i++){
		erdcl[i]=power(2,i);
	}
	for(int i=0;i<=m;i++){
		a[i]=read();
	}
//	for(i=1;i<=m;i++){
//		dfs(1,0);
//		if(lowbit(i)==k){
//			chazhao(i);
//		}
//	}
	for(int i=n;i<=n*(power(2,m));i++){
		if(lowbit(i)==k){
			sum=0;qwq=0;
			bool az=xunwen(i,1);
			cooh=1;
			for(int o=1;o<=n;o++){
				cooh*=a[clwz[o]];
				qwq+=clwz[o]?0:1;
			}
			answ+=cooh*C(n,n-qwq);
		}
	}
	cout<<answ;
	return 0;
}
//5 1 1 2 1
//ba le yi ge luo bo bo bo
//bool chaozhao(int val,int wz,int havezhi){
//	if(wz>m){
//		return val==havezhi?1:0;
//	}
//	for(i=0;i<=m;i++){
//		chazhao(val,wz+1,havezhi+power(2,i));
//	}
//}
//void chazhao(int val){
//	int i=0;
//	while(val){
//		if(val&1){
//			sum++;
//			stck[i]=1;
//		}
//		val>>=1;
//		i++;
//	}
//}
//void dfs(int wz,int sz){
//	if(sz>k)
//	return;
//	if(wz>m){
//		for(int i=1;i<=n;i++){
//			
//		}
//	}
//	dfs(wz+1,sz);
////	for(i=1;i<=2;i++){
//	edj[wz]=1;
//	dfs(wz+1);
////	}
//}
2021/11/22 13:25
加载中...