圆内连弦 - 卡特兰数

http://www.nowcoder.com/questionTerminal/d35a6bd70db24796badf71366328412f

知识点
总方案数是其中表示每次选择2个,除以表示这n次选择没有先后

而可行数是圆内连弦的个数,是个卡特兰数,不会的可以去上面的博客学习一下卡特兰数以及在圆内连弦的解法

化简总方案数

卡特兰数为

那么答案就是,求(n + 1)! % mod在mod下的逆元乘以 % mod即可

#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
const int mod = 1e9 + 7;
const int N = 1e7 + 5;
ll pow(ll a, ll b, ll p){
    ll ans = 1; a %= p;
    while(b){
        if(b & 1)ans = ans * a % p;
        a = a * a % p;
        b >>= 1;
    }
    return ans;
}
int n, fac, f[N];
int main(){
    scanf("%d", &n);
    fac = 1;
    for(int i = 1; i <= n + 1; i++)
        fac = 1ll * fac * i % mod;
    printf("%lld\n", pow(2, n, mod) * pow(fac, mod - 2, mod) % mod);
    return 0;
}
全部评论

相关推荐

我朋友的华子2012,HR已经开始问意向地区了,好急
不讲武德的黑眼圈很能干:急得不行 也不说评级 不知道报的多少啊😡
点赞 评论 收藏
分享
把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务