제출 #19912

#제출 시각아이디문제언어결과실행 시간메모리
19912xhae괄호 (kriii4_R)C++14
100 / 100
715 ms13440 KiB
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <string>
#include <queue>
#include <map>
#include <algorithm>
#include <cmath>
#include <iostream>
#include <sstream>
#include <set>
using namespace std;

const int mmod = 1000000007;

	int inv_mod(int a, int b) {
		if (a == 1) return b;
		int div = mmod / a + 1;
		return inv_mod((a * (long long)div) % mmod, (b * (long long)div) % mmod);
	}

int pw(int a, int b) {
  if (!b) return 1;
  int c = pw(a, b/2);
  c = (c * 1LL * c) % mmod;
  if (b % 2) c = (c * 1LL * a) % mmod;
  return c;
}

int mult(int a, int b, int c) {
  int d = (a * 1LL * b) % mmod;
  d = (d * 1LL * c) % mmod;
  return d;
}

vector<int> fac;

int catalan(int n) {
  int res = mult(fac[2*n], inv_mod(fac[n+1], 1), inv_mod(fac[n], 1));
  return res;
}

int main()
{
  int n, k;
  cin >> n >> k;

  fac.resize(3*n+1);
  fac[0] = 1;
  for (int i=1; i<=3*n; i++)
    fac[i] = (fac[i-1] * 1LL * i) % mmod;

  int res = pw(k+1, n);
  for (int i=0; 2*i+1<=n; i++) {
    res = (res - mult(catalan(i), pw(k, i), pw(k+1, n-2*i-1))) % mmod;
    res = (res + mmod) % mmod;
  }
  printf("%d\n", res);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...