결과
CDF 풀고, E를 못 풀었습니다.
C. Chocolate Bar
세 조각으로 자르는 경우는 (1)두 절단선이 평행한 경우 (2)두 절단선이 수직으로 만나는 경우, 총 2가지입니다.
두 절단선이 평행한 경우에는 $H$ 혹은 $W$가 3의 배수이면 모두 똑같은 넓이로 만들 수 있고, 그렇지 않으면 $\min(H, W)$만큼 차이나게 만들 수 있습니다.
두 절단선이 수직으로 만나는 경우를 처리하는 것은 여러가지 방법이 있는 것으로 알고 있습니다.
저는 세로방향으로 자르는 위치를 고정해두고, 가로방향으로 자르는 위치를 삼분탐색 했습니다. $O(H \log W)$에 처리할 수 있습니다. $H$와 $W$를 swap한 다음에 한 번 더 돌려주면 $O(H \log W + W \log H)$에 풀 수 있습니다.
1 |
|
D. 3N Numbers
$3N$개의 원소를 앞 $K$개의 원소와 뒤 $3N-K$개의 원소로 나눠봅시다$(N \leq K \leq 2N)$. 앞 $K$개의 원소에서는 가장 큰 $N$개의 합을 구하면 되고, 뒤 $3N-K$개의 원소에서는 가장 작은 $N$개의 합을 구하면 됩니다.
이런 작업은 적당한 트리 자료구조 2개를 이용해서 관리해줄 수 있습니다.
heap 2개를 써도 되고, pbds를 이용해도 됩니다.
1 |
|
E. RGB Sequence
F. Lotus Leaves
그래프를 잘 만들어서 min cut을 구하면 된다는 것을 알 수 있습니다.
행을 나타내는 정점과 열을 나타내는 정점을 만듭시다.
$(i, j)$에 잎이 있다면 $i$번째 행을 나타내는 정점과 $j$번째 열을 나타내는 정점을 용량이 1인 간선으로 이어줍시다.
$(i, j)$가 시작지점이라면 source를 $i$번째 행을 나타내는 정점과 용량이 $\infty$인 간선으로 이어주고, $j$번째 열을 나타내는 정점과도 똑같이 이어줍시다.
$(i, j)$가 도착지점이라면 sink를 $i$번째 행을 나타내는 정점과 용량이 $\infty$인 간선으로 이어주고, $j$번째 열을 나타내는 정점과도 똑같이 이어줍시다.
min cut을 구해주면 됩니다.
1 |
|