총평
체감 난이도: A = B < F < E < C < D
C: Atcoder Beginner Contest C말고 Codeforces Round Div.2 C에 나올 것 같은 문제
D: 좋은 기댓값 DP 연습 문제
E: 빈출 유형
F: Do you know Meet in the Middle
?
A. Determinant
1 |
|
B. Quizzes
1 |
|
C. Super Ryuma
ABC C답지 않게 생각할 것이 많은 문제입니다.
대각선 방향으로 이동하는 것을 2번만 하면, $(i + j) \mod 2$가 같은 모든 칸(체스판에서 색깔이 동일한 모든 칸)을 방문할 수 있습니다. 그러므로 최대 3번만 이동하면 모든 칸을 방문할 수 있습니다. 정답이 1, 2인 경우를 알아봅시다.
- $\vert dx \vert = \vert dy \vert$인 경우 대각선 방향으로 1번 이동해서 도달할 수 있습니다.
- $dx \equiv dy (\mod 2)$인 경우 대각선 방향으로 2번 이동해서 도달할 수 있습니다.
- $\vert dx + dy \vert \leq 3 \cup \vert dx - dy \vert \leq 3$인 경우 대각선 방향으로 1번 이동하면 1번의 이동을 추가해서 원하는 곳으로 갈 수 있습니다. 갈 수 있는 범위를 그림으로 그려보면 쉽게 알 수 있습니다.
- $\vert dx \vert + \vert dy \vert \leq 3$인 경우 1번 이동해서 도달할 수 있습니다.
- $\vert dx \vert + \vert dy \vert \leq 6$인 경우 2번 이동해서 도달할 수 있습니다.
1 |
|
D. increment of coins
간단한 기댓값 DP 문제입니다.
$D(a, b, c)$: 동전이 각 색깔 별로 $a$, $b$, $c$개 있을 때 100개를 만들기 위해 취해야 하는 행동 횟수의 기댓값으로 정의합시다.
$D(a, b, c) = \frac{a}{a+b+c}D(a+1, b, c) + \frac{b}{a+b+c}D(a, b+1, c) + \frac{c}{a+b+c}D(a, b, c+1)$으로 계산할 수 있습니다.
단, $\max(a, b, c) = 100$이면 $D(a, b, c) = 0$입니다.
1 |
|
E. Third Avenue
각 알파벳을 담당하는 정점 $V(c)$를 새로 만들어줍시다.
$a_{i, j} = c$라면 $(i, j)$에서 $V(c)$로 들어가는 가중치 0인 간선, $V(c)$에서 $(i, j)$로 나가는 가중치 0인 간선을 추가하고, $V(c)$를 지나갈 때 가중치 1을 부여합시다.
정점에 가중치가 있는 것을 처리하기 힘들기 때문에, $V(c)$ 정점을 들어가는 정점과 나가는 정점으로 분할한 다음, 두 간선을 가중치가 1인 간선으로 연결하면 쉽게 처리할 수 있습니다.
최단 경로를 구하는 것은 Dijkstra를 쓰면 $O(E \log V)$, 0-1 BFS를 쓰면 $O(V+E)$에 문제를 해결할 수 있습니다. 이때 $V = E = O(HW)$입니다.
1 |
|
F. Programming Contest
$N \leq 40$? Do you know Meet in the Middle
?
Bitmask를 하면 $O(N \cdot 2^N)$에 문제를 해결할 수 있습니다. 주어지는 데이터를 절반씩 나눠서 각각 Brute Force한 다음 이분 탐색을 통해 결과를 합치면 $O(2^{N/2} \log 2^{N/2}) = O(N \cdot 2^{N/2})$에 문제를 해결할 수 있습니다.
1 |
|