zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    希尔排序
    折半插入排序
    自学git心得-2
    读书笔记-1 《人月神话》
    USTCCourseCommunity 项目介绍
    自学git心得-1
    HDU 2006 求奇数的乘积
    HDU 2007 平方和与立方和
    HDU 2005 第几天?
    HDU 2004 成绩转换
  • 原文地址:https://www.cnblogs.com/QQ2519/p/15400724.html
Copyright © 2011-2022 走看看