AT1974 [ARC058B] いろはちゃんとマス目 / Iroha and a Grid

编程入门 行业动态 更新时间:2024-10-06 06:45:00

AT1974 [ARC058B] いろはちゃんとマス目 / Iroha and a <a href=https://www.elefans.com/category/jswz/34/1769555.html style=Grid"/>

AT1974 [ARC058B] いろはちゃんとマス目 / Iroha and a Grid

根据简单的组合数可以知道从 ( a , b ) (a,b) (a,b)到 ( x , y ) (x,y) (x,y)的路径方案数是
( x − a + y − b x − a ) \binom{x-a+y-b}{x-a} (x−ax−a+y−b​)

然后枚举中间点,把两遍乘起来求和即可

code:

#include<bits/stdc++.h>
#define N 200500
#define ll long long
#define mod 1000000007
using namespace std;
ll qpow(ll x, ll y) {ll ret = 1;for(; y; y >>= 1, x = x * x % mod) if(y & 1) ret = ret * x % mod;return ret;
}
ll fac[N], ifac[N];
void init(int n) {fac[0] = 1;for(int i = 1; i <= n; i ++) fac[i] = fac[i - 1] * i % mod;ifac[n] = qpow(fac[n], mod - 2);for(int i = n - 1; i >= 0; i --) ifac[i] = ifac[i + 1] * (i + 1) % mod;
}
ll C(int n, int m) {return fac[n] * ifac[m] % mod * ifac[n - m] % mod;
}
ll calc(int x, int y, int xx, int yy) {return C(xx + yy - x - y, xx - x);
}
int n, m, a, b;
int main() {scanf("%d%d%d%d", &n, &m, &a, &b);init(n + m);ll ans = 0;for(int i = 1; i <= n - a; i ++)ans += calc(1, 1, i, b) * calc(i, b + 1, n, m) % mod, ans %= mod;printf("%lld", ans);return 0;
}

更多推荐

AT1974 [ARC058B] いろはちゃんとマス目 / Iroha and a Grid

本文发布于:2024-02-28 11:38:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769289.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:ARC058B   Grid   Iroha

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!