题目链接:点击这里
约定: 表示向右走一格, 表示向左走一格,那么每一个路径对应着一个排列。
以从 到 为例,总的路径数为 ,非法的路径(红线以上)数为 ,故合法方案为
到 的方案数为 ,组合式展开可得
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
int qmi(int a, int b, int p)
{
int res = 1;
while(b)
{
if(b & 1) res = (ll)res * a %mod;
a = (ll)a * a % mod;
b >>= 1;
}
return res;
}
int main()
{
int n;
scanf("%d", &n);
int a = 2 * n, b = n;
int ans = 1;
for(int i = a; i > a - b; --i) ans = (ll)ans * i % mod;
for(int i = 1; i <= b; ++i) ans = (ll)ans * qmi(i, mod - 2, mod) % mod;
ans = (ll)ans * qmi(n + 1, mod - 2, mod) % mod;
printf("%d\n", ans);
return 0;
}