Bracket Sequence

题目意思: 给你一个 n  和 k  , k是种类  ,n*2 是括号的数量  ,问你最多有多少种不同的排序

可以参考一下

卡特兰数_百度百科 

#include 
#define ll long long
using namespace std;
const int mod = 1e9 + 7;
const int N = 2e5 + 10;
ll s[N], v[N];
ll qi(ll a) {
    ll ans = 1;
    int p = mod - 2;
    while (p) {
        if (p & 1) ans = ans * a % mod;
        a = a * a % mod;
        p >>= 1;
    }
    return ans;
}
int main() {
    int n, k;
    cin >> n >> k;
    ll b = 1;
    for (int i = 1; i <= n; i ++ ) b = b * k % mod;
    s[0] = 1;
    for (int i = 1; i <= 2 * n; i ++ ) {
        s[i] = s[i - 1] * i % mod;
        if (i == n) v[i] = qi(s[i]);
    }
    ll x = qi(n + 1);
    cout << (((s[2 * n] * v[n] % mod) * v[n] % mod) * x % mod)* b % mod << endl;
    return 0;
}

你可能感兴趣的:(模板,算法)