21.10.13模拟 染色

为了能分清楚每块板砖用来秒掉哪种类型的题(雾),他需要把板砖染色。他手上有红色、蓝色和绿色颜料可以染色。其中,用红色染一块板砖可以得到A的能力加成;用蓝色染一块板砖可以得到B的能力加成;用绿色染一块板砖可以得到C的能力加成。板砖可以不染色,这样这块板砖就不会贡献任何的能力加成。为了使得能力加成正好为x,有几种染法。C=A+B;

其实可以不管绿色的。直接看A+B,因为
RB_GBG
R__R_R
_B_BBB

inline void init() {
	fac[0] = 1;
	rep(i, 1, N)	{
		fac[i] = 1ll * fac[i - 1] * i % mod;
	}
	inv_fac[N] = Quick_Pow(fac[N], mod - 2);
	drp(i, N - 1, 0) {
		inv_fac[i] = inv_fac[i + 1] * (i + 1) % mod;
	}
	inv_fac[0] = 1;
}
inline lxl C(lxl n,lxl m){
	if(m>n) return 0;
	return fac[n]*inv_fac[m]%mod*inv_fac[n-m]%mod;
}
/*
inline lxl AA(lxl a, lxl b, lxl c) {
	return fac[n] * inv_fac[a] % mod * inv_fac[b] % mod * inv_fac[c] % mod * inv_fac[n - a - b - c] % mod;
}*/
int main() {
	freopen("color.in","r",stdin);
	freopen("color.out","w",stdout);
	init();
	read(T);
	while(T--) {
		read(n);
		read(A);
		read(B);
		read(x);
		ans=0;
        rep(i,0,n){
        	lxl rest=x-1ll*i*A;
        	if(rest<0) continue;
        	if(rest%B) continue;
        	lxl j(rest/B);
        	ans=(ans+C(n,i)*C(n,j)%mod)%mod;
		}
		out(ans, '
');
	}
	return 0;
}

本文来自博客园,作者:{2519},转载请注明原文链接:https://www.cnblogs.com/QQ2519/p/15400724.html

原文地址:https://www.cnblogs.com/QQ2519/p/15400724.html