Many Many Paths(组合计数)
题意
给定,求,其中表示从往上或者往右走到的方案数。
题目链接:https://atcoder.jp/contests/abc154/tasks/abc154_f
数据范围
思路
参考blog:https://www.cnblogs.com/lllxq/p/12354597.html
第五行的公式,在前面加上一个,再减去一个,即可得到。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 2000010, mod = 1e9 + 7;
int r1, c1, r2, c2;
ll fac[N], infac[N];
ll qmi(ll a, ll b)
{
ll res = 1;
while(b) {
if(b & 1) res = res * a % mod;
b >>= 1;
a = a * a % mod;
}
return res;
}
ll inv(ll a)
{
return qmi(a, mod - 2);
}
ll C(ll x, ll y)
{
return fac[x] * infac[y] % mod * infac[x - y] % mod;
}
void init()
{
fac[0] = infac[0] = 1;
for(int i = 1; i < N; i ++) fac[i] = fac[i - 1] * i % mod;
for(int i = 1; i < N; i ++) infac[i] = infac[i - 1] * inv(i) % mod;
}
ll calc(int a, int b)
{
ll res = 0;
for(int i = 0; i <= a; i ++) {
res = (res + C(i + b + 1, b)) % mod;
}
return res;
}
int main()
{
init();
scanf("%d%d%d%d", &r1, &c1, &r2, &c2);
printf("%lld\n", ((calc(r2, c2) - calc(r1 - 1, c2) - calc(r2, c1 - 1) + calc(r1 - 1, c1 - 1)) % mod + mod) % mod);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!