본문 바로가기

일기 (사실 근황임)

Good Bye, BOJ 2021!

 

Good Bye, BOJ 2021!

 

www.acmicpc.net

서론

2022년 대회 예비소집 문제로 출제되었다.

 

A - 2021은 무엇이 특별할까?

전처리

 

B - 예쁜 케이크

a * b = N and (a + b) % 3 = 0인 a와 b가 존재하는지 확인해야 한다.

case work를 해보자.

 

(i) a % 3 == 0 and b % 3 == 0

a와 b 모두 3의 배수이므로 N % 9 == 0이어야 한다.

 

(ii) a % 3 == 1 and b % 3 == 2

a와 b는 각각 (3k_a + 1)과 (3k_b + 2)로 표현할 수 있다.

이때 a와 b의 곱은 (3 * (3 * k_a * k_b + 2 * k_a + k_b) + 2)이다.

따라서 N % 3 == 2이어야 한다.

 

(iii) a % 3 == 2 and b % 3 == 1

(ii)번 case와 동일하다.

 

따라서 N % 9 == 0 or N % 3 == 2인지 확인하면 된다.

 

C - 성싶당 밀키트

이분 탐색

 

D - 횡단보도

dijkstra

 

E - XOR 기계

찍었는데 맞았다.

원리는 대략적으로 이해하였지만 설명할 수 있을 정도는 아니다.

 

F - 미로 설계

편의를 위하여 위상 정렬 순서가 정점 번호 순서와 동일하다고 가정한다.

다음과 같은 배열 A를 정의하자.

A[i] = i번 방에 도착하는 경우의 수

A[1] = 1이므로 1번 방에서 N번 방으로 가는 통로를 x개 추가하면 문제를 해결할 수 있다.

하지만 문제의 제한에 의하여 최대 120개의 통로만 추가할 수 있다.

 

A[i] = 2^(i - 1)가 되도록 통로를 적절히 추가하였다고 가정하자.

이때 추가적으로 최대 log K개의 통로를 추가하면 문제를 해결할 수 있다.

이미 존재하는 통로 때문에 위의 가정을 만족시키는 것은 거의 불가능하지만 이와 유사하게 만들 수는 있다.

i번 방에서 (i + 1)번 방으로 가는 통로를 적절히 추가하여 2 * A[i] <= A[i + 1] < 3 * A[i]를 만족시킬 수 있음을 증명할 수 있다.

결론만 말하자면 최대 4 log K개의 통로를 추가하여 문제를 해결할 수 있다.

 

G - 극장 좌석 배치

복잡한 case work

 

'일기 (사실 근황임)' 카테고리의 다른 글

2023년 1월 13일 일기  (2) 2023.01.14
BOJ 19089번 - 파일 합치기 4  (0) 2023.01.07
제1회 곰곰컵  (0) 2022.12.25
C++ iterator 사용 시 주의 사항  (0) 2022.12.19
BOJ 26248번 - 겨울 숲의 수호자  (0) 2022.12.17