제출 #20079

#제출 시각아이디문제언어결과실행 시간메모리
20079gs14004괄호 (kriii4_R)C++14
0 / 100
106 ms25160 KiB
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <limits.h> #include <stack> #include <queue> #include <map> #include <set> #include <algorithm> #include <string> #include <functional> #include <vector> #include <numeric> #include <deque> #include <utility> #include <bitset> #include <iostream> using namespace std; typedef long long lint; typedef long double llf; typedef pair<int, int> pi; const int mod = 1e9 + 7; lint fact[1000005]; lint cat[1000005]; lint dp[1000005]; lint ipow(lint x, lint p){ lint ret = 1, piv = x % mod; while(p){ if(p&1) ret *= piv; piv *= piv; ret %= mod; piv %= mod; p >>= 1; } return ret; } int main(){ memset(dp, -1, sizeof(dp)); int n, k; cin >> n >> k; fact[0] = 1; for(int i=1; i<=n; i++){ fact[i] = fact[i-1] * i % mod; } for(int i=0; i<=n/2; i++){ cat[i] = fact[2*i] * ipow(fact[i] * fact[i], mod - 2) % mod; cat[i] *= ipow(i+1, mod-2); } dp[0] = 1; for(int i=1; i<=n; i++){ if(i%2 == 0){ dp[i] = dp[i-1] * (k+1) % mod; } else{ dp[i] = dp[i-1] * (k+1) % mod - cat[i/2] * ipow(k, i/2); } } cout << dp[n]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...