请求 DEBUG
查看原帖
请求 DEBUG
922691
Hisy楼主2024/5/21 19:53
#include<cstdio>
#define int long long
#define mod 1000000007
int plan[404],frac[404],invf[404];
inline int power(int first,int second){
	int result=1;
	while(second){
		if(second&1){
			(result*=first)%=mod;
		};
		(first*=first)%=mod;
		second>>=1;
	};
	return result;
};
inline int inv(int number){
	return power(number,mod-2);
};
inline int partly(int first,int second){
	return frac[first]*invf[second]%mod*invf[first-second]%mod;
};
signed main(signed argc,char **argv){
	int maxn,maxm,type;
	scanf("%lld %lld %lld",&maxn,&maxm,&type);
	frac[0]=1;
	for(int iter=1;iter<=400;++iter){
		frac[iter]=frac[iter-1]*iter%mod;
	};
	invf[400]=inv(frac[400]);
	for(int iter=399;iter>=0;--iter){
		invf[iter]=invf[iter+1]*(iter+1)%mod;
	};
	for(int first=1;first<=type;++first){
		int count=0,factor=1;
		for(int second=maxm;second>=1;--second){
			(((count+=power(-1,second)*(power(factor-1,maxn)*partly(maxn,second)%mod))%=mod)+=mod)%=mod;
			(factor*=(first+1))%=mod;
		};
		plan[first]=((power(power(first+1,maxm)-1,maxn)-count)%mod+mod)%mod;
	};
	int valid=plan[type],invalid=0;
	for(int iter=1;iter<=type;++iter){
		(((invalid+=power(-1,iter-1)*(plan[type-iter]*partly(type,iter)%mod))%=mod)+=mod)%=mod;
	};
	printf("%lld",((valid-invalid)%mod+mod)%mod);
	return 0;
};
2024/5/21 19:53
加载中...