车的放置
这道题首先我们可以考虑特殊的情况:
- 当给定的图形为矩形的时候:我们有(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;
}