Submission #20082

#TimeUsernameProblemLanguageResultExecution timeMemory
20082gs14004괄호 (kriii4_R)C++14
8 / 100
608 ms48596 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[2000005]; lint cat[2000005]; lint dp[2000005]; 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(){ 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; 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) % mod + mod; dp[i] %= mod; } } cout << dp[n]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...