이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<stdio.h>
#define M 1000001
#define T 1000000007
long long power[M],k,fact[M],d[M],f[M];
int n;
long long Pow(long long a)
{
long long i,t=1ll,c=0ll,ans=1ll;
f[0] = a;
for(i=1; ; i++){
f[i] = (f[i-1] * f[i-1]) % T;
t*=2ll;
if(t>=T) break;
}
for(t = T-2;;){
if(t&1) ans = (ans * f[c]) % T;
c++; t/=2ll;
if(t==0) break;
}
return ans;
}
long long catalan(int a)
{
return (((Pow(a+1)*Pow(fact[a]))%T) * ((Pow(fact[a])*fact[2*a])%T))%T;
}
int main()
{
int i;
scanf("%d%lld",&n,&k);
power[0] = fact[0] = 1;
for(i=1; i<=n; i++) power[i] = (power[i-1] * k) % T;
for(i=1; i<=2*n; i++) fact[i] = (fact[i-1] * i) % T;
d[1] = k;
for(i=2; i<=n; i++){
if(i%2 == 0) d[i] = d[i-1] * (k + 1ll) % T;
else d[i] = ((d[i-1] * (k+1)) % M - (power[(i-1)/2] * catalan((i-1ll)/2ll)) % M + M) % M;
}
printf("%lld",d[n]);
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |