zoukankan      html  css  js  c++  java
  • 车的放置

    车的放置


    这道题首先我们可以考虑特殊的情况:

    • 当给定的图形为矩形的时候:我们有(C_L^k*A_W^k)

    那么,对于不规则的图形,我们其实也可以通过分割为上下两个独立的矩形计算。

    具体来说:我们可以枚举在上面的有(i)和车,上下进行乘法原理计算。

    这道题其实很有启发意义:如果遇到一个题目无法直接计算,可以通过分割的手段分别来计算,最后通过加法原理累和答案。

    ……
    int a, b, c, d, k, jc[N], jc_inv[N];
    int power(int x, int y)
    {
    	int res = 1;
    	while(y)
    	{
    		if(y & 1) res = 1ll * res * x % mod;
    		y >>= 1;
    		x = 1ll * x * x % mod;
    	}
    	return res;
    }
    void init()
    {
    	CLR(jc, 0), CLR(jc_inv, 0);
    	jc[0] = 1;
    	FOR(i, 1, 2001) jc[i] = 1ll * jc[i - 1] * i % mod;
    	jc_inv[2001] = power(jc[2001], mod - 2);
    	ROF(i, 2000, 0) jc_inv[i] = 1ll * jc_inv[i + 1] * (i + 1) % mod;
    	return;
    }
    int C(int x, int y)
    {
    	if(x > y) return 0;
    	return 1ll * jc[y] * jc_inv[y - x] % mod * jc_inv[x] % mod; 
    }
    int A(int x, int y)
    {
    	if(x > y) return 0;
    	return 1ll * jc[y] * jc_inv[y - x] % mod;
    }
    int main()
    {
    	init();
    	scanf("%d %d %d %d %d", &a, &b, &c, &d, &k);
    	long long ans = 0, j;
    	for(int i = 0; i <= k; ++ i)
    	{
    		j = k - i;
    		ans += 1ll * C(i, b) * A(i, a) % mod * C(j, d) % mod * A(j, a + c - i) % mod;
    		ans %= mod;
    	}
    	printf("%lld
    ", ans);
    	return 0;
    } 
    
  • 相关阅读:
    C++PRIMER 阅读笔记 第三章
    一个for循环打印二维数组
    递归实现数组求和
    strlen 与 sizeof
    call,apply,bind,this
    js 原型继承
    vue 动画
    vuex学习心得
    vue+elementui dropdown 下拉菜单绑定方法
    vue 生命周期一点学习
  • 原文地址:https://www.cnblogs.com/zach20040914/p/14346988.html
Copyright © 2011-2022 走看看