제출 #19688

#제출 시각아이디문제언어결과실행 시간메모리
19688Namnamseo괄호 (kriii4_R)C++14
100 / 100
419 ms32332 KiB
#include <cstdio> typedef long long ll; const ll M=int(1e9)+7; ll catalan[1000010]; ll fact[2000010]; ll kpow[1000010]; ll pow(ll a,ll b){ if(b==0) return 1; ll ret=pow(a,b/2); ret=(ret*ret)%M; if(b&1) ret=(ret*a)%M; return ret; } int main() { int n,k; int i; scanf("%d%d",&n,&k); fact[0]=1; kpow[0]=1; for(i=1; i<=2*n; ++i) fact[i]=(fact[i-1]*i)%M; catalan[0]=1; for(i=1; i<=n; ++i){ catalan[i] = fact[2*i] * pow( fact[i+1]*fact[i]%M, M-2 ) %M; kpow[i] = (kpow[i-1]*k)%M; } ll cur=1; for(i=1; i<=n; ++i){ cur=cur*(k+1)%M; if(i%2 == 1){ // can perfectly match //printf("i %d; perfect match %I64d\n",i,catalan[(i-1)/2]*kpow[(i-1)/2]%M); cur -= catalan[(i-1)/2]*kpow[(i-1)/2]%M; cur = (cur+M)%M; } //printf("i %d : %I64d\n",i,cur); } printf("%d\n",int(cur)); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...