Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

PS 저장소

SUAPC 2023 Winter 후기 본문

대회후기

SUAPC 2023 Winter 후기

Maker29 2023. 3. 1. 17:58

여기에서 말하는 시간 개념은 대회 시작 후 경과한 시간으로 나타내었다.

 

 

K. 시계 맞추기

https://www.acmicpc.net/problem/27532

 

27532번: 시계 맞추기

첫째 줄에 일지에 적힌 시간의 개수 $M$이 주어진다. ($1\le M \le 1\,500$) 둘째 줄부터 $M$개의 줄에 걸쳐 일지에 적힌 시간이 HH:MM 형식으로 주어진다. 시간(HH)은 $1$ 이상 $12$ 이하의 정수, 분(MM)은 $0$

www.acmicpc.net

체감 난이도: Silver ~ Gold

알고리즘 분류: 브루트포스

 

처음에 팀원 3명$ ( $본인 포함$ ) $끼리 문제를 나눠서 문제 알고리즘 체크를 하였는데, 다른 팀원이 이 문제를 dp나 그리디일 것으로 예상하여 보류한 상태로 그나마 자신있던 수학문제인 L번을 풀고 있었다. 하지만 접근방식을 고민하다가 너무 안 풀려서 K번을 보는데 브루트포스로 충분히 풀릴 것 같아 45분 경부터 풀기 시작하였다.

 

우선 입력 시간 $ N $은 낮과 밤의 구분이 없다고 하니 00:00 ~ 11:5912 * 60 = 720 가지의 경우의 수가 존재한다. 따라서 HH:MM으로 나타내져 있는 시간을 분으로 환산하여 0 ~ 719로 나타낼 수 있다.

입력된 $ N $을 분으로 환산한 값들을 $ N\textit{}_{1}, N\textit{}_{2}, \cdots N\textit{}_{M} $ 이라고 했을 때, 모든 시간을 $ R $분마다 기록하고 난 후에는

$$ N\textit{}_{1}, \ N\textit{}_{2} + R, \ N\textit{}_{3} + 2R, \ \ \ \cdots \ \ \ ,N\textit{}_{M} + (M - 1)R $$

로 표현할 수 있다. 앞서 말했듯이 환산된 분은 최대 719분까지만 가능하므로 모든 값들을 modulo 720 한다.

그리고 $ R \geq 720 $ 인 경우 또한 $ R \ \textbf{mod} \ 720 $ 한 경우와 동일하므로 $ R $이 0 이상 720 미만인 경우만 고려하면 된다.

시간복잡도는

$$ O(720M) \simeq 10^{6} $$

로 1초 안에 해결 가능하다.

 

52분에 퍼솔하였다.

 

 

L. 따로 걸어가기

https://www.acmicpc.net/problem/27533

 

27533번: 따로 걸어가기

첫째 줄에 정수 $N$과 $M$이 공백을 사이에 두고 주어진다. ($2 \le N, M \le 200\,000$)

www.acmicpc.net

체감 난이도: Diamond

알고리즘 분류: 정수론, 집합론

 

이 문제를 처음부터 잡고 계속 안 풀려서 중간중간 팀원들 반례도 찾아주고 다른 문제도 찔러보다가 120분 경에 다시 맘 잡고 본격적으로 풀기 시작하였다. 처음에는 두 토끼가 이동할 수 있는 모든 경우의 수 $ (\frac{(N+M)!}{N!M!}) ^ 2 $에서 포함-배제 원리로 빼 나가려고 접근하였으나, $ O(N ^ 2) $의 시간 초과로 인하여 다른 방법을 구상하였다.

이전에 풀었던 문제 중에 이 문제와 비슷한 문제를 Catalan number를 활용하여 푼 적이 있었는데, 이 문제를 뒤크 문자열로 변형하여 계산해보려 했으나, 뒤크 문자열 개수를 세기 위해서는 짝수여야 하는데 $ N+M $이 짝수라는 보장이 없고, 뒤크 문자열과 약간 다른 형태라고 생각하여 이 방법 또한 포기하고 다른 방법을 구상하였다. $($대회가 끝나고 해설을 보니 Catalan number를 활용한 풀이가 정해가 맞았다$)$

결국 선택한 것은 정수론을 활용한 수열의 일반항을 찾는 것인데, 대회에서 사용하기에는 매우 비효율적인 방법이었다. 하지만 운이 좋게도 예상보다 금방 구해져서 다행이었다고 생각한다.

 

우선 경우의 수를 $ f(N, M) $이라고 하자.

$ N = 2 $ 또는 $ M = 2 $인 경우 $ f(N, M) = 2 $이다. 이는 서로 경로를 바꾸는 것 이외에는 경우의 수가 없다.

이를 초항으로 잡고 나머지 수열들의 관계를 정리하여 일반항을 도출 보았더니

$$ f(N,M) = 2 \prod_{i = 1}^{M - 2} \frac{(N + i - 2)(N + i - 1)}{i(i + 1)} $$

로 나타낼 수 있었다.

시간복잡도는 분자와 분모를 modulo $10^9+7$ 하며 계산한 후 분모 값의 역원을 곱해주는 것이 되므로

$$ O(M + log(10^9+5)) \simeq 2 * 10^{5} $$

로 1초 안에 해결 가능하다.

 

225분에 AC. $($아쉽게 퍼솔은 224분$)$

 

이후 대회 풀이를 보니 조합론으로 푸는 것을 목표로 출제하셨다고 하셔서 수열을 정리해 보니

$$ f(N,M) = \frac{2}{N+M-2}\binom{N+M-4}{N-2}\binom{N+M-2}{N-1} $$

$$ = \frac{2}{N+M-2}\binom{N+M-4}{M-2}\binom{N+M-2}{M-1} $$

로 표현할 수 있었다.

이는 조합론에서 사용되는 Narayana number 형태이다.

 

 

후기

나머지 문제도 몇 문제 더 풀어 5 Solve하였지만, 몇개 문제에서 특정 반례의 벽을 넘지 못하고 6 Solve의 벽을 넘지 못하고 11등으로 대회를 마무리 하였다.

10등까지 수상하여 수상권 밖이지만 특별상$($수상권 제외 학교별 상위 1팀$)$은 받게 되었다.

작년 9월에는 10등을 하여 수상을 하였는데 이번 대회는 눈앞에서 수상권을 놓쳐 많이 아쉬웠고, 다른 대회들을 앞서 중상급 수준 이상 알고리즘 공부를 좀 더 해야할 듯 하다.

Comments