https://www.acmicpc.net/problem/30521
30521번: Mike Sees The Storm (Large)
$N=2$, $K=2$일 때 Mike가 얻을 수 있는 수열의 목록은 [$-1, -2, -1, 0$], [$-1, 0, -1, 0$], [$-1, 0, 1, 0$], [$1, 2, 1, 0$], [$1, 0, 1, 0$], [$1, 0, -1, 0$] 총 $6$가지로, 최댓값의 $K$제곱을 합하면 $7$이다.
www.acmicpc.net
카탈란 수의 응용입니다.
먼저 주어진 문제를 격자 속의 최단 경로 문제로 환원합니다.
칠판에 적힌 숫자를 $a$에서 $a-1$ 로 바꾸는 연산을 오른쪽으로 한 칸 이동하는 것으로,
$a$에서 $a+1$로 바꾸는 연산을 위로 한 칸 이동하는 것으로 간주할 수 있습니다.
이렇게 문제를 환원하였을 때 최댓값이 0인 경로는 주대각선의 아래로만 지나가는 경로임을 확인할 수 있습니다.
또한 그러한 경로의 개수는 카탈란 수와 같은데, 이는 대각선을 지나는 경로를 대칭시키는 방법으로 구할 수 있습니다.
결과적으로 최댓값이 $0$ 인 경로의 개수는
$$ \binom{2N}{N} - \binom{2N}{N-1} $$
입니다.
이제 최댓값이 $1$ 인 경로의 개수를 구합니다.
카탈란 수를 구할 때와 마찬가지로 대각선을 설정한 뒤, 해당 대각선을 지나는 경로를 대칭시킵니다.
그러면 최댓값이 $1$ 인 경로의 개수는
$$ \binom{2N}{N} - \binom{2N}{N-2} - \left \{ \binom{2N}{N} - \binom{2N}{N-1} \right \} $$
$$ = \binom{2N}{N-1} - \binom{2N}{N-2} $$
와 같이 나오게 됩니다.
이런 식으로 최댓값이 $i$ 인 경로의 개수가 다음과 같이 나옵니다.
$$ \binom{2N}{N - i} - \binom{2N}{N - i - 1} $$
이로부터 정답은
$$ N^{k} + \sum_{i=0}^{N-1}i^{k} \times \left \{ \binom{2N}{N - i} - \binom{2N}{N - i - 1} \right \} $$
인데, 식을 변형하여
$$ \sum_{i=0}^{N-1} \binom{2N}{i} \left \{ (N-i)^{K} - (N-i-1)^{K} \right \} $$
으로도 구할 수 있습니다.
이론상 최선의 시간복잡도는 $O(N \log K)$ 이지만, $O(N \log P + N \log K)$ 로도 시간 안에 충분히 들어옵니다.
제 코드는 다음과 같습니다.
#include <stdio.h>
#define mod 1000000007ull
typedef unsigned long long ull;
ull power_modular (ull X, ull Y) {
ull result = 1;
while(Y) {
if (Y % 2) {
result = result * X % mod;
}
X = X * X % mod;
Y /= 2;
}
return result;
}
int main() {
ull N, K;
scanf("%llu %llu", &N, &K);
ull array[1000001] = {};
for (int i = 0; i <= N; i++) array[i] = power_modular(i, K);
ull answer = 0;
ull binom = 1;
for (int i = 0; i < N; i++) {
answer = (answer + binom * (array[N - i] - array[N - 1 - i] + mod)) % mod;
binom = (binom * (2 * N - i) % mod) * power_modular(i + 1, mod - 2) % mod;
}
printf("%llu", answer);
return 0;
}
(C11, 184ms, 8808KB, 제출번호 69530647)
$O(N\log P \log K)$ 로도 풀릴까요?
'분할 정복을 이용한 거듭제곱 > 정수 거듭제곱' 카테고리의 다른 글
백준 30354번: Sum of Product of Binomial Coefficients (1) | 2023.11.09 |
---|---|
백준 30169번: Primes and Multiplication (1) | 2023.09.30 |
백준 27743번: 어려운 하노이 탑 (1) | 2023.09.30 |
백준 28294번: 프랙탈 (0) | 2023.09.02 |
백준 27875번: 파이파이 (0) | 2023.09.01 |