Codejam 2021 Round 2
์ฌํด Codejam์ (๋ํํ ์์ด) ์ฌ์ค์ ๋ง์ง๋ง round์ด๋ฏ๋ก (R3 ๋ ์ฌ๋ฐ๊ฒ ํ๊ฒ ์ง๋ง competition์ผ๋ก์จ๋ ์ป์๊ฒ ์๋ค) Hashcode ๋์ฒ๋ผ prep๊ณผ ๊ณผ์ ์ ์ข ์ ์ด๋ณด๋ ค๊ณ ํ๋ค. ์์ผ๋ก ๋ฉ์ด์ ํ ๋ํ๋ ์ด๋ ๊ฒ ์ ์ด๋ณผ ์๊ฐ์ด๋ค.
Preperation
๊ทธ๋ ๊ฒ ๋งํ๊ธด ํ์ง๋ง ์ค๋นํ ์ ์์๋๊ฑด ๋ฑํ ์๋ค. ์ฌํด๋ CP์ ์ฐ๊ธฐ์๋ ๋๋ฌด ํ ์ผ์ด ๋ง๋ค.
๋ฐฉํ๋๋ฉด ๋ชจ๋ฅผ๊นโฆํ๊ธฐ์ค์ PS/CP์ ๋ง์ ์๊ฐ์ ํฌ์ํ๊ธฐ์๋ ์๋ฌด๋๋ ์ด๋ ค์์ด ๋ง๋ค. ๊ทธ๋๋ ์๋ ์ฝ๋์ผ๊ณผ ์ง๊ธ ๋น๊ตํ์๋ (PS์ ์ธ ์ธก๋ฉด์์) ์ด๋ค ์ ๋ค์ด ๋์์ก๋์ง / ๋์์ง์ง ์์๋์ง ๋น๊ตํด๋ณด๋ฉด ์ค๋น๋ฅผ ๋์๊ธฐ๋ ์ธก๋ฉด์์ ์กฐ๊ธ์ ๋์์ด ๋ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค.
-
Courses. Problem solving์ ๊ฒฐ๊ตญ ์์ด๋์ด์ ์ง์์ด ๋ ๋ค ํ์ํ๋ฐ, ๋ช๋ช ๋ด์ฉ๋ค - ์๋ 1ํ๊ธฐ์ ๋ค์ ์๊ณ ๋ฆฌ์ฆ, ์ง๊ธ ๋ฃ๊ณ ์๋ ์ ์๋ก ๋ฑ - ์ ๋์์ด ๋๋๊ฑด ์ฌ์ค์ด๋ค. ๋์ถฉ ๋ค ์๋ ๋ด์ฉ์ด๊ธด ํ์ง๋ง ํผ์์๋ ์ ๋ ํ์ง ์์ revisit์ ๋ค์ ํด๋ณด๋๊ฑด ๋ถ๋ช ํ ์๋ฏธ๊ฐ ์๋ค. Generalํ๊ฒ, ์ ์๋ก ๊ฐ์ ํํธ๋ค์ ์ง์์ ์ธ ์ธก๋ฉด๋ณด๋ค๋ ๊ทธ๋ฅ ๊ณ ๋ฏผํด๋ณด๋ ์๊ฐ์ ๊ฐ๋๊ฒ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค.
-
C++ ๊ตฌํ๋ฅ๋ ฅ์ ์คํ๋ ค ์๋ ๋ง ๋ชปํ๋ค. 2ํ๊ธฐ ์๊ฐ์์ค์ด ๋ถ๊ธฐ์ ์ด ๋์ด์ ๊ทธ๋ฐ๊ฑฐ ๊ฐ์๋ฐ, ๋์์ค๋ ค๋ฉด ์์ง ๋ฉ์๋ค๊ณ ์๊ฐํ๋ค. 2019๋ ICPC ๋ ํ์๋ค์ด ๊ต์ฅํ ๊ตฌํ์ ํ๋ค์ดํด์ ์๋ ๋ฉ์ฉกํ๋ ์ฌ๋๋ค์ด ์์ด๋ฌ๋ ์ถ์๋๋ฐ, ๋์ถฉ ์๊ทธ๋ฐ์ง ์๊ฑฐ ๊ฐ๊ธฐ๋ ํ๋ค.
-
๊ทธ๋์ CF rating์ ๋ต๋ณด๋ฅผ ๊ฑฐ๋ญํ๋๋ฐ, ํ๋ฌธ์ ์ก๊ณ ํธ๋ ๋ฅ๋ ฅ์ ์๋ ์ ๋นํด ๋์์ก๋ค๊ณ ์๊ฐํ๋ค.
dhdroid
๊ฐ์ ๊ฒฝ์ฐ์๋ ๋น ๋ฅธ ์ฝ๋ฉ ์ค๋ ฅ์ ๊ฐ์ถ์ง๋ ๋ชปํ์ง๋ง ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ๊ณ ๋ฏผํ๋ฉด ๋๋ณด๋ค ํจ์ฌ ์ฒด๊ณ์ ์ผ๋ก ๊ด์ฐฐ์ ์์๋๊ฐ๋ ๋ฅ๋ ฅ์ด ์๋๋ฐ, ๊ฐ์ด ๊ณต๋ถํ๋ฉด์ ์ด๋ฐ๊ฑธ ๋ง์ด ๋ฐฐ์ ๋ค.
Preliminary & Round 1
- Preliminary๋ 30์ ์ ๋ํ๊ฐ ํ์์ด๋ฏ๋ก ์นดํ์ ์์์ ๊ทธ๋ฅ ๋์ถฉ ์ ๋ช๋ฌธ์ ๋ง ๋ด๋ณด๊ณ ๋์ก๋ค. ๊ทธ๋ ๊ฝค ๋ฐ์ ์ผ์ ๋ค์ด ์์๊ธฐ ๋๋ฌธ์โฆ
- Round 1์ ๋ญ๊ฐ ํญ์ R1B๋ฅผ ์น๊ฒ ๋๋ ๊ธฐ๋ถ์ด๋ค.
Problem 1 : Minimum Sort
Easy. ๋ฐ๋ก ๋ ์ค๋ฅด๋ Naive ํ์ด๋ฅผ ๊ทธ๋ฅ ๊ตฌํํ๋ฉด ๋๋ค.
[1, 100] ์ค ๊ฐ์ฅ ์์๊ฑธ ๋ฝ๊ณ , ๋งจ ์์ผ๋ก ๋ณด๋ธ ๋ค์, [2, 100] ์ค ๊ฐ์ฅ ์์๊ฑธ ๋ฝ๊ณ โฆ. ์ด๋ ๊ฒ ํ๋ฉด ์๋ชจํ๋ ์ฝ์ธ ์๋ $1/2 + 1/3 + \dots 1/100$ ๊ฐ ์ ๋์ด๊ณ , ์ด ๊ฐ์ 6๋ณด๋ค ์์ผ๋ฏ๋ก ์ด๋๋ก ์ง์ ๋ด๋ฉด ๋๋ค.
Problem 2 : Matrygons
$K$๊ฐ ์ฃผ์ด์ง ๋, <์กฐ๊ฑด>์ ๋ง์กฑํ๋ distinctํ ์์ด $x_1, x_2, \dots x_N$ ์ค $N$์ด ์ต๋์ธ ์์ด์ ์ฐพ๋ ๋ฌธ์ .์กฐ๊ฑด>
- $\sum_{i = 1}^{N} x_i = K$ ์ฌ์ผ ํ๋ฉฐ
- $x_1$ ์ด $x_2$์ ์ฝ์, $x_2$๊ฐ $x_3$์ ์ฝ์โฆ. $x_N$ ๊น์ง ์ด๋ฅผ ๋ง์กฑํด์ผ ํ๋ค.
๋จผ์ , $K$ ๊ฐ $x_1$ ์ ๋ฐฐ์์์ ์ฝ๊ฒ ๊ด์ฐฐํ ์ ์๋ค. ๋ํ, $K - x_1$ ์ $x_2$์ ๋ฐฐ์์ด๊ณ โฆ ์ด๋ฅผ ๋ฐ๋ณตํ ์ ์๋ค๋ ๊ฒ์ด ์ฒซ๋ฒ์งธ ๊ด์ฐฐ์ด๋ค.
๋๋ฒ์งธ๋ก, $N$์ด reasonableํ๊ฒ ์์์ ๊ด์ฐฐํ์. $2x_i \leq x_{i+1}$ ์์ ํ์ธํ ์ ์๋๋ฐ (๋ฐฐ์์ฌ์ผ ํ๊ณ , ๊ฐ์ผ๋ฉด ์ ๋๋ฏ๋ก) ์ด๋ฅผ ๋ณด๋ฉด, $N$์ ๋ง์์ผ $\log K$, 30 ์ ๋์ด๋ค.
์ด ๋๊ฐ์ง๋ฅผ ์ด์ฉํ๋ฉด, $f(k, t)$ ๋ฅผ โํ์ฌ $x = t$, $K = k$์ผ ๋ $x$ ๋ถํฐ ์์ํด์ ์์ด์ ๋ง๋ค์ด์ $k$๋ฅผ ๋ง๋ค๊ณ ์ ํ ๋, ์ต๋์ $N$๊ฐโ ์ผ๋ก ์ ์ํ๋ฉด $f(k, t)$ ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๊ฝค ๋น ๋ฅด๊ฒ ๊ณ์ฐํ ์ ์๋ค. ์ค๋ช ํ๊ธฐ๊ฐ ๊ต์ฅํ ๊น๋ค๋กญ์ง๋ง ์ฝ๋๋ ๋งค์ฐ ๊ฐ๋จํ๋ฏ๋ก ์๋ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์.
์ฃผ์ํ ์ ์, 1๊ฐํ์ด๋ 2๊ฐํ์ ์์ผ๋ฏ๋ก ์ฒ์์๋ 3๊ฐํ ์ด์์ผ๋ก ์์ํด์ผ ํจ์ ์ฃผ์ํ์. (์ด๊ฑธ๋ก 1ํํ๋คโฆ)
๋ผ์ด๋๊ฐ ๋๋๊ณ dhdroid
์ discussionํ๋๋ฐ ์ญ์ DPํฉ๋ต๊ฒ ๋๋ณด๋ค ํจ์ฌ ์ข์ DP ์๋ฃจ์
์ ๊ฐ์ ธ์๋ค. :fan:
Problem 3 : Hidden Pancakes
์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ, ์ฃผ์ด์ง ๋ฌธ์ ์ํฉ์ ์ ์ด์ฉํ๋ฉด โ$i$ ๋ฒ์ด $j$๋ฒ๋ณด๋ค ํฌ๋ค/์๋คโ ํํ์ ์ ๋ณด๋ฅผ ๋ง์ด ์ป์ ์ ์๋ค. ์ด๋ฌํ ์ ๋ณด๋ค์ด consistent ํ๋ค๋ฉด, transitivity์ ์ํด imply๋๋ ์ ๋ณด๋ค์ ์ ์ธํจ์ผ๋ก์จ Directed tree๋ฅผ ๋ง๋ค ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์์ 2๋ 1 1 2
์ธ๋ฐ, ์ด๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณผ ์ ์๋ค.
- ์ฒ์์๋ <1> ์ด ๋ณด์ด๋ ์ํฉ์ด๋ค.
- 1 ๋ค์์ 1์ด ์จ ์์ ์์, ๋ณด์ด๋๊ฒ 1๊ฐ์ด๋ฏ๋ก ํ์ฌ ๋ณด์ด๋ ๊ฒ์ <2> ์ด๋ค. 2๋ฒ์ด 1๋ฒ์ ์คํ์์ ์ซ์๋์ผ๋ฏ๋ก, 2๋ฒ์ด 1๋ฒ๋ณด๋ค ํฌ๋ค.
- ๊ทธ๋ค์ 2๊ฐ๊ฐ ๋ณด์ด๋ฏ๋ก <2, 3> ์ด๋ค. 3๋ฒ์ด 2๋ฒ์ ์ซ์๋ด์ง ๋ชปํ์ผ๋ฏ๋ก 2๋ฒ์ด 3๋ฒ๋ณด๋ค ํฌ๋ค.
์ด๋ฅผ ํธ๋ฆฌ๋ก ๊ทธ๋ฆฌ๋ฉด 2๋ฒ์ด ๋ฃจํธ๊ฐ ๋๊ณ , 1๋ฒ๊ณผ 3๋ฒ์ด 2๋ฒ์ child node์ธ ํธ๋ฆฌ๊ฐ ๋๋ค.
๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก, ์์ 1์ธ 1 2 2 1
์ ๋ณด์.
- ์ฒ์์๋ <1> ์ด ๋ณด์ด๋ ์ํฉ์ด๋ค.
- ๋๋ฒ์งธ ์์ ์ ์คํ์ <1, 2> ์ด๋ฏ๋ก 1์ด 2๋ณด๋ค ํฌ๋ค.
- ์ธ๋ฒ์งธ ์์ ์ ์คํ์ <1, 3> ์ธ๋ฐ, ์คํ์์ 3์ด 2๋ฅผ ์ซ์๋์ผ๋ฏ๋ก 3์ด 2๋ณด๋ค ํฌ๋ค. ๋ํ, 3์ด 1๋ณด๋ค๋ ์๋ค.
- ๋ง์ง๋ง ์์ ์์ <4> ๊ฐ ๋ชจ๋ ์ซ์๋์ผ๋ฏ๋ก 4๊ฐ 1๋ณด๋ค ํฌ๋ค.
๋ฐ๋ผ์, 4 > 1 > 3 > 2 ์์ ์ ์ ์๋ค. ์ด๋ฅผ ํธ๋ฆฌ๋ก ๊ทธ๋ฆฌ๋ฉด ํ ์ค๋ก ์ญ ์ด์ด์ง ํธ๋ฆฌ๊ฐ ๋๋ค.
์ด๋ ๊ฒ ํธ๋ฆฌ๋ฅผ ๊ทธ๋ฆฌ๊ณ ๋๋ฉด, ์ด โํธ๋ฆฌ๊ฐ ์ ๊ณตํ๋ partial orderโ๋ฅผ ๊นจ์ง ์์ผ๋ฉด์ $n$๊ฐ์ ํฌ์ผ์ต ํฌ๊ธฐ๋ฅผ ์ ํ๋ ๋ฌธ์ ๊ฐ ๋๋๋ฐ, ์ด๋ ๋ค์ ๋งํ๋ฉด 1, 2, โฆ $n$์ ๊ฐ ํธ๋ฆฌ ๋ ธ๋์ ์จ๋ฃ๋ topological order๋ฅผ ๊นจ์ง ์๋ permutation์ ๊ฐ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ๊ฐ ๋๋ค.
์ด๋ ์ฆ, ํ์ฌ ์ฃผ์ด์ง ํธ๋ฆฌ์ ์ ๋ฒํ topological order์ ๊ฐ์๋ฅผ ์ธ๋ ๋ฌธ์ ์ ๊ฐ๋ค. ์ด ๋ฌธ์ ๋ ๋๋ฆ๋๋ก well-known ์ด๋ฏ๋ก, ์ฝ๊ฐ ๊ตฌ๊ธ๋งํด๋ณด๋ฉด Tree DP ๋ก ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์๋ค. ์ณ์ฝ๋์ ๋ฌธ์ ๋ก๋ ๋์จ ์ ์๋ค. ๋ฌธ์ ๋งํฌ
๋ถ๋ช ์ ์ณ์ฝ๋ ๋ฌธ์ ๋ฅผ ํ๋๋ ์๊ฐ์ ํด์ ($O(n \log n)$์ด๊ธด ํ์ง๋ง ์ด๊ฑธ ํผ์ ์ฐพ์๋์๋๋ฐ, ์์ธ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ผ์ด๋ ๋๋ ์ ๋ฐ ์๊ฐ์ ์ ํ ๋ชปํ๋ค. :( Tree DP๋ ํญ์ ๋๋ฌด ์ด๋ ค์ด๋ฏโฆ)
Round ์ดํ
์ฌํด์ ์ฒซ ๋ฉ์ด์ ๋ํ์ธ๋ฐ ๋๋ฆ ์ฌ๋ฐ์๋ค. ์๋ ์ด๋ ์ฌ์๋ Round 2์ ๋นํ๋ฉด ์กฐ๊ธ ์ฌ์์ง๋ฏํ๋ฐ, ์ด์ฐจํผ ์๋ํ๊ฐ๋๊น ํฐ ์๋ฏธ๋ ์์ ์๋โฆ
1000๋ฑ์ด๋ผ๋ ์ปคํธ๋ฅผ ์ ํด๋๊ณ ์์ํ๋ ๋ผ์ด๋๋ค ๋ณด๋ 66์ ์ ๋ฐ์ ์๊ฐ์ผ๋ก ๊ฐ๋ฆด์๋ฐ์ ์๋๋ฐ, ๊ทธ๋๋ ๋คํํ ๋ง ์ฒซ ํ์คํฌ ๋นจ๋ฆฌํผ ์๊ฐ ์ด๋ฐ์์ผ๋ก ๊ฐ๋ฆฐ speed์ค์ฌ์ ๋ํ๋ ์๋๋ผ์ ์ฝ๊ฐ ๋คํ์ด๋ค. ๊ฐ๋จํ ์์ด๋์ด / DP / ํธ๋ฆฌ DP ๋ผ๋ ์ฒซ 3๋ฌธ์ ์ ์ธํ ๋ reasonableํ๋ค๊ณ ๋ณด๊ณ โฆ
R3๋ ์ฌ๋ฐ๊ฒ ์น๊ณ ํ๊ธฐ์ ๋๋ ์ฌ๋ฆด ๊ณํ์ด๋ค :P