본문 바로가기

분할 정복을 이용한 거듭제곱/행렬 거듭제곱

(61)
백준 13976번: 타일 채우기 2 https://www.acmicpc.net/problem/13976 13976번: 타일 채우기 2 첫째 줄에 N(1 ≤ N ≤ 1,000,000,000,000,000,000)이 주어진다. www.acmicpc.net 타일 채우기라고 부르는 유형은 풀이법이 어느정도는 정해져 있습니다. 보통 점화식을 구해야하는데, 그 과정에서, 다음 과정을 거칩니다. 작은 $N$ 값에 대해 답을 구해봅니다 적당히 큰 값의 $X$ 에 대해서, 가로로 $X$ 만큼의 크기(이 문제에서는 $3\;by\;X$ )를 얻었다고 칩니다 그 다음 $X+1$ , $X+2$ , 로 확장해가면서 점화식을 추론합니다 이 글에서도 위와 같은 과정을 거칠 것입니다. 우선 $N=2$ 일 때, 답은 3입니다. 다음과 같은 경우의 수가 있습니다. $N=4..
백준 1529번: 동민 수열 https://www.acmicpc.net/problem/1529 1529번: 동민 수열 첫째 줄에 Numbers 배열의 크기 N과 L이 주어진다. N은 50보다 작거나 같은 자연수이고, L은 1,000,000,000보다 작거나 같은 자연수이다. 둘째 줄에 Numbers배열에 들어있는 수가 주어진다. 각각의 수는 1,00 www.acmicpc.net 이 문제는 이전 두 포스팅과 아주 유사한 문제입니다. ( 12878번: Blocks ) ( 19587번: 객실 배치 ) 우선, 다음 성질에 따라 4와 7로만 이루어진 수를 찾습니다. 금민수는 4와 7로만 이루어진 수이다. $A\left [ i \right ]$ 는 금민수이다. $\left ( 0\leq i < L \right )$ 주어진 숫자 $N$ 개에서 ..
백준 19587번: 객실 배치 https://www.acmicpc.net/problem/19587 19587번: 객실 배치 1층 호텔이면 101호에 배치한 경우, 102호에 배치한 경우, 아무 호실에도 배치하지 않는 경우, 총 3가지 경우를 생각할 수 있다. www.acmicpc.net 이전 포스팅과( 12878번: Blocks ) 방법론이 비슷한 문제입니다. 다만, 이전 포스팅에서는 모든 state의 경우의 수를 문제에서 답으로써 요구하지는 않았습니다. 그 점에서, 이번 문제는 정답에 해당하는 경우를 여러 state로 나눠 본다는 차이가 있습니다. $N=1$ 일 때의 예제 해설에 따라서, $N$ 층까지 사람을 조건에 맞게 배치한 경우를 생각해 봅시다. 이때, $N$ 층에 대하여 다음과 같은 state 들이 존재한다고 할 수 있습니다..
백준 12878번: Blocks https://www.acmicpc.net/problem/12878 12878번: Blocks N개의 블록이 일렬로 놓여져 있습니다. 민호는 각각의 블록들을 빨, 주, 노, 초 네가지 색중 한가지 색으로 칠하려 합니다. 민호는 문득 빨간색으로 칠해진 블록의 개수와 노란색으로 칠해진 블 www.acmicpc.net 우선 이 문제에서 구하고자 하는 경우의 수를 관찰하고자 합니다. 편의상 이하에서 짝수라는 표현을 0을 포함하는 2로 나눠떨어지는 정수들의 집합으로 정의하겠습니다. N개의 블록들을 모두 칠했을 때 빨간색과 노란색으로 칠해진 블록의 개수가 2로 나누어 떨어지게 칠하는 경우의 수 예제를 보면, $N=1$ 일 때 답은 2입니다. 전체 블록이 1개이므로 조건을 만족하기 위해 빨간색 또는 노란색으로 칠해진..
백준 12728번: n제곱 계산 www.acmicpc.net/problem/12728 12728번: n제곱 계산 이 문제에서 숫자 (3 + √5)n 에 대한 소수점 앞에 마지막 세 자리를 찾아야합니다. 예를 들어, n = 5 일 때 (3 + √5)5 = 3935.73982 ... 이므로 답은 935입니다. n = 2 인 경우 (3 + √5)2 = 27.4164079 … 이므로, www.acmicpc.net 이전에 올렸던 글과 비교했을 때 $n$ 의 범위가 조금 더 커졌습니다. (백준 12925번: Numbers) 그 외의 차이가 없습니다. 코드는 다음과 같습니다. #include typedef struct { int array[2][2]; } Matrix; Matrix matrix_multiply_modular (Matrix A, Ma..
백준 12925번: Numbers www.acmicpc.net/problem/12925 12925번: Numbers 각 Test case에 대해, “Case #c: x”의 형식으로 각 줄에 정답을 출력한다. c는 Test Case의 번호이다. (1부터 매겨진다.) x는 해당 Test Case의 정답이다. www.acmicpc.net 다소 발상이 힘든 풀이를 가진 문제입니다. 우선 문제는 $M\leq \left ( 3+\sqrt{5} \right )^{n}\leq M+1$ 일 때 $M$ 의 $modulo$ 1000 값을 구하라는 것입니다. 가볍게 $n=1$ 인 상황부터 생각해봅시다. 계산기를 써보면 $\left ( 3+\sqrt{5} \right )^{1}=3+\sqrt{5}=5.236067\cdots$ 이므로, 정수부는 5가 됩니다. 그..
백준 18287번: 체스판 이동 www.acmicpc.net/problem/18287 18287번: 체스판 이동 크기가 N×M인 체스판이 있다. 체스판의 행 번호는 위에서부터 1, 2, ..., N이고, 열 번호는 왼쪽에서부터 1, 2, ..., M이다. 체스판의 각 칸은 (i, j)로 표현하고, i는 행 번호, j는 열 번호이다. 체스판의 www.acmicpc.net 우선 체스판이 어떻게 생겼는지 알아야 합니다. 검정색 칸을 $B$, 흰색 칸을 $W$라고 표현할 때 체스판의 생김새는 다음과 같습니다. $\begin{matrix}B & W & B & W & \cdots\\ W & B & W & B & \cdots\\ \vdots & \vdots & \vdots & \vdots & \ddots\end{matrix}$ $M$을 적당히 큰 ..
백준 9341번: ZZ www.acmicpc.net/problem/9341 9341번: ZZ 각 테스트 케이스마다 ZZ(c, d) mod 1 000 000 009를 출력한다. www.acmicpc.net 이전 글 (백준 13430번: 합 구하기) 을 보고 오셨다면 비슷한 점을 느끼실 수 있는 문제입니다. 사실 풀이가 거의 똑같습니다. 그런 점에서 이 문제는 처음부터 식 변형을 통해 점화식을 이끌어내겠습니다. 우선 $i\geq 1$에 대해 $ZZ\left(i,1 \right)=a$ 입니다. 이는 다음을 통해 보일 수 있습니다. $ZZ\left(i,1 \right)=ZZ\left(i-1,1 \right)=\cdots=ZZ\left(1,1 \right)=ZZ\left(0,1 \right)=a$ 이제 다음 두 식을 비교해보겠습니다. ..