Submission #19868

#TimeUsernameProblemLanguageResultExecution timeMemory
19868yongwhan괄호 (kriii4_R)C++14
100 / 100
912 ms17336 KiB
#include<bits/stdc++.h> using namespace std; const int mod=1e9+7; const int mx=1e6+5; typedef long long ll; ll fact[mx], f[mx]; ll exp(ll a, ll b, ll m) { ll r=1; while(b) { if(b%2) r=(r*a)%m; a=(a*a)%m; b/=2; } return r; } ll inv(ll a, ll m) { return exp(a,m-2,m); } int binom(int n, int m, int mod) { ll a=fact[n], b=fact[m], c=fact[n-m]; ll ret=a*inv(b,mod); ret%=mod; ret*=inv(c,mod); ret%=mod; return ret; } ll catalan(int n, int mod) { ll a=fact[2*n], b=fact[n+1], c=fact[n]; ll ret=a*inv(b,mod); ret%=mod; ret*=inv(c,mod); ret%=mod; return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); fact[0]=1; for (int i=1; i<mx; i++) fact[i]=(fact[i-1]*i)%mod; ll n,k; cin>>n>>k; f[0]=1; for (int i=1; i<=n; i++) { if(i%2==0) f[i]=f[i-1]*(k+1)%mod; else { f[i]=(f[i-1]*(k+1))%mod; ll add=(exp(k,i/2,mod)*catalan(i/2,mod))%mod; f[i]=(f[i]+(mod-add))%mod; } } cout << f[n] << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...