UCPC 2022 ๋ณธ์ ํ๊ธฐ
-
๋ณธ๋ฌธ์์ ์ธ๊ธ๋๋ ๋์ด๋ ํฐ์ด (๋ธ/์ค/๊ณจ/ํ/๋ค/๋ฃจ) ๋ Solved.ac ๊ธฐ์ค์ ๋๋ค.
-
ํ์ ๊ดํด์๋ ์์ ํ๊ธฐ ์๋ ์ ์ด๋์์ต๋๋ค :)
ํ์ฐ์ต
UCPC ๋ณธ์ ์ ICPC์ ๋๊ฐ์ 5์๊ฐ 3์ธ 1PC ๋ํ์ ๋๋ค. ๊ณ ๋ ค๋ Hongjun7๋ ๋ฑ ํ๋ํ๋ฅผ ์ฆ๊ธฐ๋ฉด์ ์ํ๊ธฐ ์ํด์๋ ์ด ๋ํ ํ๋ ์์ ๋ง๋ ์ค๋น๊ฐ ํ์ํฉ๋๋ค. 3์๊ฐ 3PC ๋ํ์ ๋นํด, 5์๊ฐ 1PC ๋ํ๋ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ ๋์ ๋๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค
- ์ค์๊ถ ์ด์์ ํ ๋๋ถ๋ถ์ ๊ตฌํ์ด bottleneck์ ๋๋ค.
- PC ์์ ํญ์ 1๋ช ์ด ์์์๋ค๋ ๋ง์, ๋ฐ๋๋ก 2๋ช ์ด ํญ์ ์ปดํจํฐ์์ ์์ ๋ผ๊ณ ์๋ค๋ ์๋ฏธ๊ฐ ๋ฉ๋๋ค. ์ฆ, ํธ๋ ์ฌ๋์ 2๋ช ์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ฅผ ๋์์ 2๊ฐ tackleํ๊ฑฐ๋, ๋์ด ๋ ผ์๋ฅผ ํตํด ์๋ฃจ์ ์ ๊ตฌ์ํ ์ ์์ต๋๋ค
- ๊ฐ์ฅ ์ํํ ๊ฒ์ ์ ๋ง๋์ค ์์๋๋ฐ ์ง๋ค๋ณด๋๊น ์๋๋ค ์ ๋๋ค. 3PC ๋ํ์์ 30๋ถ๋์ ๋ง๋ฆฌ๋ ๊ฒ์ ํ์ ์๊ฐ์ 30๋ถ ์๋ชจํ ๊ฒ์ด์ง๋ง, 1PC ๋ํ๋ โPC-์๊ฐโ ์ด 3๋ฐฐ ๊ทํ ์์์ด๊ธฐ ๋๋ฌธ์ ์ปดํจํฐ ์์์ ๋ ๋ฆฐ 20๋ถ์ ์ปดํจํฐ ๋ฐ์์ ๋ ๋ฆฐ ์ต์ 40๋ถ~1์๊ฐ ๊ฐ๋์ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๊ทธ๋์ ๋ํ์ ํฌ๋งท์ ๋ง๊ฒ 2๋ฒ์ ํ์ฐ์ต์ ๋ ํ์ต๋๋ค.
- 2021 ์์ธ ๋ฆฌ์ ๋ ํ์ฐ์ต : ์๋ ICPC์ ๋ฌธ์ ๋ฅผ ์๋ฌด๋ ๋ณธ์ ์ด ์๋ค๋๊ฒ ์ด๋ฏธ ์ ํฌ๊ฐ ์ผ๋ง๋ PS๋ฅผ ๋ ๋์์๋์ง ๋ณด์ฌ์ฃผ๋๊ฒ ์๋๊น์? K๋ฒ์ ์๊ฐ๋ด์ ๊ตฌํํด๋ด์ง ๋ชปํ๋ค๋ ์ ์ธ์๋ ๊ฒฐ๊ณผ ์์ฒด๋ ํฌ๊ฒ ๋ฌธ์ ๋ ์์์ง๋ง, Stet-stet๊ณผ ์ ๊ฐ ํ๋ฌธ์ ์ฉ ์ก๊ณ ๊ฐ๊ฐ ์ผ์ด์ค์ ๋ฆฌ์ ๊ตฌํ์ด์๋ก ํ์ ์ด์์ผ๋ก ๊ณ ํต๋ฐ์ผ๋ฉฐ PC-์๊ฐ์ ์๋ชจํ์ต๋๋ค.
- 2020 ์์นด๋ฅดํ ๋ฆฌ์ ๋ ํ์ฐ์ต : ๋๋ ์ฝ๋๋ฅผ ๋ค ์ง๋๊ณ ์ด์ด์๋ DFS ๊ตฌํ์ค์๋ฅผ ํด์ (โฆ) ์ ๊ฐ PC-์๊ฐ์ ํผ์ 1์๊ฐ ๊ฐ๊น์ด ๋ ๋ฆฐ ์ค์ฃ๋ฅผ ์ ์ง๋ ์ต๋๋ค. ์ ๋ฐ์ ์ผ๋ก ๋ง์ด ๋ง๋ ธ๋๋ฏ ํฉ๋๋ค.
์ธ๋ช ๋ชจ๋ ๊ตฌํ์ด ๋ฑํ ๊ฐํ๊ฒ์ ์๋๋ผ๋ ์ ์ ์ฌํ์ธํ์ต๋๋ค. ๋ฌํ๊ฒ ์ปจ์ ์ด ๊ฒน์น๋ ์ ํฌ ํ์ ์๋ง๋ ์ฌ๊ฑด์ด ๊ฐ์ถ์ด์ง๋ฉด ๋ค์ด์ ์ํ/DP ๋ฌธ์ ๋ฅผ ๊ฒฉ์ถํ ์ ์๋ ๋์ (ํนํ ์ธ๋ช ์ด ์ํ์ ์ข ์ข์ํ๋ ๊ตฌ์ฑ์ด๊ณ , DHDroid์ Stet-stet์ DP/Construction์ ๊ต์ฅํ ๊ฐํฉ๋๋ค. ์ ๋ ์๋์ ์ผ๋ก ์ ์๋ก ๋ฅ ๋ฌธ์ ๋ฅผ ์ข์ํ๊ณ โฆ) UCPC 2019 ํ์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋์จ๋ค๋ฉด ๊ทธ๋๋ก ๋งํ ์๋ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
๋ณธ ๋ํ
3๋ ๋ง์ ์คํ๋ผ์ธ ๋ํ๋ผ์ ์ค๋ ๋ ๋ง์์ผ๋ก(?) ์ฐพ์๊ฐ ๋ํ์ฅ์ ์ฝ์์ค ๊ทผ์ฒ๋ผ์, ์ ๋ ๊ต์ฅํ ๊ฐ๊น์ ์ต๋๋ค.
2019๋ UCPC๋ ๊ณ ๋ ค๋์๊ณ ๊ต์ฅํ ํ๊ฒฝ์ด ์ข์๋๋ฐ, ์ด๋ฒ์๋ ๋ค์ ํ์ํ ๊ฐ์ด ์์์ต๋๋ค. ํ๊ต ๋๊ด์ด ์๋๋ฉด ์ฌ์ค ์ด์ฉ์ ์์๊ฒ ์ง๋งโฆ
Competitive Programming์ ์์ง๊ฐ์ ๋ฌธ์ ๋ณ ํ์ ์ ๋ณด๋ ๋ฌํ๊ฒ ๋ค๋ด๋ ๊ธฐ์ต์ด ์์ต๋๋ค. ใ ใ
Phase 1 : WTF?
์ด๋ฐ์ ๋ต์ ABCD(Gratus)/EFGH(Stet-stet)/IJKL(DHDroid) ๋ก ๋๋ ์ฝ๊ณ , ์ฌ์ด๊ฑธ ๋จผ์ ์ฐพ์๋ค์ scoreboard-drivenํ๊ธฐ๋ก ํ์ต๋๋ค. ์ด ๊ณผ์ ์์ ์ค์ํ๊ฑด ๋ชจ๋ ๋ฌธ์ ๋ฅผ ์ฝ๋ ๊ฒ์ ๋๋ค.
์ฐ์ตํ๋ ๋๋ก ๋ฌธ์ ๋ฅผ ๋๋์ด ์ฝ์์ต๋๋ค. ์ ๋ ABCD๋ฅผ ์ก์๊ณ , ๋ณดํต ์์ ์ฌ์ด๊ฒ ํ๋ ์์ฌ์๊ณ ์ ๊ฐ ์ ์ผ ์ฝ๋ฉ์ด ๋นจ๋ผ์ ์ด๋ ๊ฒ ํ๋๋ฐ ์ฌ์ค UCPC๋ณธ์ ๊ฐ์ ํ๋ ์ด์ ๋ฌธ์ ๋ก ๋นก๋นกํ๊ฒ ์ฑ์์ง ๋ํ์์๋ ํฐ ์๋ฏธ๋ ์์ต๋๋ค.
- A : ๋ญ๊ฐ ํ๋์ฉ ์ฑ์๋๊ฐ๋ฉด์ ์์ ๋ฌธ์ ๊ฐ ๋๋๊ฒ DP๊ฐ์ ๋๋. DHDroid์๊ฒ ๋๊ฒจ์ผ ํ๋? ๋ฅผ ์๊ฐํ๊ณ ์ผ๋จ ์ ๊ผ์ต๋๋ค.
- B : Backus-Naur Form, ์ปดํ์ผ๋ฌ๊ฐ์๊ฒ ๋์ค๋๊ฑธ ๋ณด๊ณ ์ฆ์ ๋ฒ๋ฆฌ๊ธฐ๋ก ํ์ต๋๋ค.
- C : ๋น๊ต์ ํ ๋ง ํด ๋ณด์์ต๋๋ค. ์ข ์๊ฐํด ๋ณด๊ธฐ๋ก ํ๊ณ โฆ
- D : ์ ํ์ ์ธ ์์ด๊ณผ ์ฟผ๋ฆฌ ๋ฌธ์ ์๋ค๊ฐ, ๋ญ๊ฐ ํฉ์ ํฉ์ ํฉ์ ํฉ์ ํด์ผํ ๊ฑฐ๊ฐ์ ๋๋์ ์ผ๋จ C๋ณด๋ค๋ ์ด๋ ค์ ๋ณด์์ต๋๋ค.
์ ๋ ์ฌ๊ธฐ๊น์ง ์ฝ๊ณ , C๋ฅผ ์๊ฐํ๋ฉด์ ์ฌ์ด ๋ฌธ์ ๋ฅผ ๋ค์์ identify ํด์ฃผ๊ธธ ๊ธฐ๋ค๋ ธ์ต๋๋ค. ๋ค ๋ฌธ์ ๋ฅผ ์ฝ์ ๋์ฌ๋๋ ๊ณ ํต๋ฐ๊ณ ์๋๊ฑฐ ๊ฐ์๋๋ฐ, ์ฌ๊ธฐ๊น์ง ๋๋ฆ PSํ๋ ์ค๋ ์ ๊ธฐ๋ถ ์ข์๋ ๊ธฐ์ต์ด ์์ต๋๋ค.
๋ค์์ J๋ฒ์ด ๋น๊ต์ ์ฌ์ด ๋ฌธ์ ์์ ํ์ ํด์๊ณ , ๋ฐ๋ก ํ์ด์ ๋ง์์ต๋๋ค.
J - ๊ต์งํฉ ๋ง๋ค๊ธฐ
๋์ด๋ : S1 AC Time : 00:20
solve : DHDroid
code : Gratus907
1๊ฐ ๊ตฌ๊ฐ์ผ๋ก ๊ฐ๋ฅํ ๊ฒฝ์ฐ, 2๊ฐ ๊ตฌ๊ฐ์ผ๋ก ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ์์์ ํ์ ํ๋ฉด ๋ฉ๋๋ค. 1๊ฐ๋ ์๋ช ํ๋ฏ๋ก ๋ถ๊ฐ๋ฅ๊ณผ 2๊ฐ๋ฅผ ๊ตฌ๋ถํ๋ฉด ๋ฉ๋๋ค.
๋ง์ฝ 3๊ฐ ์ด์์ ๊ตฌ๊ฐ์ ๊ต์งํฉ์ด $[l, r]$ ์ด๋ผ๋ฉด, ์ด๋ค ์ค $l$์์ ์์ํด์ $r$๋ณด๋ค ์ค๋ฅธ์ชฝ๊น์ง๋ฅผ ์ปค๋ฒํ๋ ๊ตฌ๊ฐ์ด ์๊ณ , $r$์์ ๋๋๋ฉด์ $l$๋ณด๋ค ์ผ์ชฝ์์ ์ถ๋ฐํ๋ ๊ตฌ๊ฐ์ด ์์ต๋๋ค. ์ด ๋๊ฐ๋ฅผ ํํ๋ฉด 2๊ฐ๋ก ์ค์ผ ์ ์์ต๋๋ค. ์ญ์ผ๋ก, 2๊ฐ์ ๊ตฌ๊ฐ์ ์ด์ฉํด์ $[l, r]$์ ์ปค๋ฒํ๊ธฐ ์ํด์๋ $l$์์ ์ถ๋ฐํด์ ๊ฐ์ฅ ๋ฉ๋ฆฌ๊น์ง ๋ฟ๋ ๊ตฌ๊ฐ๊ณผ, $r$์์ ๋๋๋ฉด์ ๊ฐ์ฅ ์ผ์ชฝ์์ ์ถ๋ฐํ๋ ๊ตฌ๊ฐ์ ์ด์ฉํด์ ๋ง๋ค ์ ์๋์ง ํ์ธํ๋ฉด ์ถฉ๋ถํฉ๋๋ค.
์๋ง DHDroid๊ฐ ๋ฌธ์ ๋ ๊ฑฐ์ ๊ฐ์ด ํ์ด๋ฅผ ์ ๋ฌํ๋๊ฑฐ ๊ฐ์๋ฐ ์ ํํ๋ ๊ธฐ์ต์ด ์๋๋ค์.
H - ํน๋ณ์
๋์ด๋ : S1 AC Time : 00:28
solve : Stet-stet
code : Gratus907
๋ง์ฐฌ๊ฐ์ง๋ก Stet-stet์ด ๋ฌธ์ ์ ๋ต์ ๋์์ ์ ๋ฌํ์ต๋๋ค.
์ฌํ์ ์ ์๊ฐ ๋์ $K$๋ช ์ ์ด์ฐจํผ ๋ฌด์จ ์์ด๋ ๋ฐ์์๋ฐ์ ์์ผ๋ฏ๋ก, ๊ทธ๊ฑธ ๋จผ์ ๊ทธ๋ฅ ์ฌํ์์ ์ค๋ฒ๋ฆฌ๊ณ ๋จ์์ฌ๋์ค ์ฃผ์ต์ ์ ์๊ฐ ๋์ ์ฌ๋ $M$๋ช ํํ ์ฃผ์ต์์ ์ฃผ๋ฉด ์ฃผ์ต์ ์ ์ฅ์์ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ ๋ ฌ ๋๋ฒํ๋ ๊ทธ๋ฆฌ๋ ๋ฌธ์ .
L - ์ปค๋ฅํฐ๋ ์นด ์คํ
๋์ด๋ : G4 AC Time : 00:48
solve : DHDroid, Gratus907
code : Gratus907
์ ๊ฐ ์ฒ์์ ์์์ ์์ ์์ชฝ์ผ๋ก ๋๊น์ง ๊ฐ๋ณด๋ ๊ฐ๋จํ ๊ทธ๋ฆฌ๋๋ก ๋๋ค๊ณ ์๊ฐํ๊ณ Stet-stet๊ณผ ์ ๊น ์๊ธฐํ์ง๋ง, ๋๋ค ๊ฐ์ ์ฐฉ๊ฐ์ ํด์ ์ค์๋ฅผ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ๊ตฌํํด์ ํ๋ฒ ํ๋ฆฌ๊ณ DHDroid๊ฐ ์ฐพ์์คฌ์ต๋๋ค :fan:
๋งค ์์ ์, โ์ง๊ธ ๋จน์ ์ฐจ๋ณด๋ค ํ๋ ์ผ์ชฝ/์ค๋ฅธ์ชฝ์ ์ฐจ๋ฅผ ๋จน์ ์ ์๋์งโ ๋ฅผ ํฌํฌ์ธํฐ์ฒ๋ผ ํ๋จํฉ๋๋ค. ํฌํฌ์ธํฐ ๊ตฌํ์ ๋ณ๋ก ์ด๋ ต์ง ์๊ณ , โ์ต๋ํ ๋ง์ ์ฐ๋ฃ๋ฅผ ๋จ๊ธฐ๋ฉดโ ์ต๋ํ ๋ฉ๋ฆฌ ๊ฐ์ ์์ผ๋ฏ๋ก ๋งค ์์ ์๋ ๊ทธ๋ฆฌ๋ํ๊ฒ ์ ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
Phase 2 : TLE (K - ์ ๋ํ์ฐ ํ ๋๋จผํธ)
์ฌ๊ธฐ๊น์ง ๋ํ๊ฐ ์๋นํ ์ ๊ตด๋ฌ์์ต๋๋ค. ๊ฒฐ์ ์ ์ผ๋ก, ์ ๊ฐ L์ ๊ตฌํํ๋ ๋์ K๋ฅผ DHDroid์ Stet-stet์ด ๊ฑฐ์ ๋ค ํ์์๊ณ ๊ฑฐ์ ๋ฐ๋ก ๊ตฌํ์ ๋ค์ด๊ฐ ์ ์์์ต๋๋ค.
์ด K๊ฐ ์ด๋ค ๋์ฐํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ์ง๋ ์๊ฐ์ง ๋ชปํ์ต๋๋ค.
๋์ด๋ : P2 AC Time : 02:15 (+8)
solve : DHDroid, Stet-Stet
code : DHDroid
๋ฌธ์ ๋ฅผ ์์ฝํ์๋ฉด, ํ ๋๋จผํธ์์ 1๊ฐ์ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๊ฐ ์ ์ค๋์์ ๋ ๊ทธ ์ ์ค๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณต์ํ๋ ๋ฌธ์ ์ ๋๋ค.
์ ๋ ํ์ด๋ฅผ ๊ฐ๋จํ๋ง ๋ค์๋๋ฐ, ์ผ์ข ์ ์ฌ๊ท์ ์ธ ์ ์ ์ ํตํด ๋งค๋ฒ ๊น์ด๋ฅผ 1์ฉ ์ค์ธ ํ ๋๋จผํธ๋ฅผ ๊ตฌ์ถํ ์ ์์ผ๋ฉฐ ๊ตฌํ์ด ๊ท์ฐฎ์ง๋ง ๊ทธ๋ ๊ฒ๊น์ง ์ด๋ ต์ง๋ ์๋ค๊ณ ํฉ๋๋ค. ๊ณต์ ํ์ด์ ๋์จ ๋๋ฒ์งธ ๋ฐฉ๋ฒ (์ถ์ ์์ ํ์ด) ์ ๋น์ทํ๋ค๊ณ ๋ค์์ต๋๋ค.
L์ ํ๊ณ ๋์, ์๋ก ํ ๋ฌธ์ ๋ฅผ ์ฐพ๋ ์ค DHDroid๊ฐ ๋ฌด์จ ์ฌ๊ท์ ์ผ๋ก ํ๋ฉด...
๊ฐ์ ๋ง์ ํ๊ธธ๋ ๋ฐ๋ก ๋๊ฒผ์ต๋๋ค. DHDroid๊ฐ ํ์ constructiveํ ๋ฌธ์ ์ ๋น์ํ ์ค๋ ฅ์ ๋ณด์ฌ์ฃผ๋ฏ๋ก ๋ณ ์ด๋ ค์ ์์ด ๋ง์์ค๊ฒ ์ง ํ๊ณ ์ ๋ M, F, C, D ๋ฑ๋ฑ์ Stet-stet๊ณผ ์ ๊น์ฉ ํ๋ฐฉํ๋ฉฐ ๋ค์ ํ ๋ฌธ์ ๋ฅผ ์ฐพ์ผ๋ฌ ๊ฐ์ต๋๋ค.
์ดํ๋ก WA์ TLE๋ฅผ ํฉ์ณ ๋ฌด๋ ค 8๋ฒ์ ํ๋ํฐ๋ฅผ ๋ฐ์๊ณ , ๊ทธ์ค์์๋ โ์ฝ๋๊ฐ ํ๋ฆฐ๊ฑฐ๊ฐ์ง๋ ์์๋ฐ ์ TLE์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค. ๋ณต์ก๋์๋ ์ด์์ด ์๋คโ๋ ๋ง์ ๋ฃ๊ณ ์์ ์ต์ ํ ๋ฌธ์ ์ธ๊ฐ? ๋ผ๋ ์๊ฐ์ ํ์ต๋๋ค. ์๋๋ TLE์ ๊ธฐ๋ก์ ๋๋ค. ใ ใ โฆ
- ์ฝ๋ ์ฌ๋ฐฉ์
std::map<int, int>
์ ๋ก์น ํด์ ๋๋ฆฐ๊ฒ์ผ๋ก ์๊ฐํ๊ณ , Stet-stet๊ณผ ์ ๊ฐ ์ ๋ ฌ์ฑ์ด ํ์์๋ค๋ฉดstd::unordered_map
์ผ๋ก ๋ฐ๊ฟ๊ฒ์ ์ ์ํ์ต๋๋ค. - ๊ทธ๋๋ TLE๋ฅผ ๋ฐ์์, ๋๋์ฒด ๋ฌด์จ ๋ฌธ์ ์ธ์ง ์ฐพ๊ธฐ ์ํด ๋ก์ปฌ์์ ๋ฌด๋ ค max test๋ฅผ ๋ง๋ค๊ธฐ๋ก ํ์ต๋๋ค. ๋๋ค ํ์ด๋ง์ผ๋ก ํ ๋๋จผํธ๋ฅผ ๋ง๋ค๊ณ ํ๋๋ฅผ ๋ฒ๋ฆฌ๋ ๊ฒ์ 5๋ถ์ด๋ฉด ์งค ์ ์์ผ๋โฆ
- ๋๋๊ฒ๋ DHDroid์ ์ฝ๋๋ ๋ก์ปฌ (์ M1 Pro ๋งฅ๋ถ) ์์ max case์ ๋ํ ๋ต์ 1์ด ์ด๋ด์ ์ฐพ๊ณ ์์์ต๋๋ค. ์ ํ ์๊ฐ์ 2์ด์์ผ๋ฏ๋ก ์ด๋ ์๋นํ ์์ํ์ต๋๋ค.
- M1์ด ๋ฏธ์น ์นฉ์ด๋ผ ๊ทธ๋ฐ๊ฑฐ ์๋๋? ๋ ์๊ธฐ๋ฅผ ํ๊ณ , ์ผ๋จ ์๊ฐ์ ๋ ์ค์ด๊ธฐ๋ก ํ์ต๋๋ค. ์ด๊ฒ์ ๊ฒ ์ปคํ ์ ์ข ํ๋ ์๊ฐ์ด ๋ก์ปฌ์์ 0.7์ด๋๋ก ์ค์ด๋ค์๊ณ , ์ฌ์ ํ TLE๋ฅผ ๋ฐ์์ต๋๋ค.
- ๊ฒฐ๊ตญ ์ ๊ฐ โ์ด๋ ๊ฒ๋๊ฑฐ FAST IO๋ฅผ ์ง๊ฒ ๋คโ๋ผ๊ณ ์ปดํจํฐ๋ฅผ ์ก์๋๋ฐ, ํ๋ ธํธ์ Fast hash table ์ด ์์์ ๋ ์ฌ๋ฆฌ๊ณ ๊ทธ๊ฑธ ์ง์ด๋ฃ์์ต๋๋ค.
- ๋ก์ปฌ์์๋ 0.4์ด๋, ์๋ฒ์์ 1.32์ด๋ก ํต๊ณผํ์ต๋๋ค.
์ฐธ๊ณ : Fast hash table์ Codeforces Link ์ ์๋ __gnu__pdbs::gp_hash_table
์ด๋ฉฐ, GCC ์ปดํ์ผ๋ฌ์ ํ์ฅ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก unordered_map
๋ณด๋ค ์ ๋ฐฐ ๊ฐ๊น์ด ๋น ๋ฅด๋ค๊ณ ์๊ณ ์์ต๋๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ์ง์ํ๋ ๊ฒ์ผ๋ก ์๋ ค์ง UCPC์ ์ ์ฐ๋ฆฌ๋ ์ด๋ฐ ์ฐธ์ฌ๊ฐ ๋ฒ์ด์ก๋์ง๋ ์ ์ ์์ผ๋, ์๋ง๋ ์ ํด๊ฐ ํด์ํ ์ด๋ธ์ ์ฐ๋๊ฒ ์๋์ง ์์๊น ์ถ์ต๋๋ค. ์ฌ๋ผ์ด๋์๋ ์ธ๊ธ๋์ง ์์๊ฑธ๋ณด๋ ์ ํฌ๊ฐ ์ด์ํ๊ฒ ํผ๊ฒ ๊ฐ๊ธด ํ๋ฐ, ์๋ฌดํผ ์ด ๋ฌธ์ ์ ๋ฌด๋ ค 1.5์๊ฐ์ด ๋ค์ด๊ฐ์ต๋๋ค.
Phase 3 : Segment Tree (D - ์ ๋ํ์ฐ ํ ๋๋จผํธ, F - ๋์ถฉ~๋ชฌ์คํฐ~๊ฒ์)
๊ทธ๋์ ์ ๋ stet-stet์ ๋ค ๋ช๋ฌธ์ ๋ฅผ ๊ณ ๋ฏผํ์ต๋๋ค. C๋ฒ์ ์์ ๋ฅผ ๋ณด๊ณ ๋๋ฌด ์ด๋ ค์ด๊ฑฐ ๊ฐ๋ค ๊ณ ๋ฒ๋ ธ๊ณ , D๋ stet-stet์ด, F๋ ์ ๊ฐ ์ก๊ณ ์์์ต๋๋ค. ์ ํฌ ๋๋ค M๊ฐ์ ๋ฅ์ ์ํ๋ฌธ์ ๋ฅผ ์ข์ํด์ ์ข ๊ณ ๋ฏผํด๋ณด์๋๋ฐ ๋คํญ์๋ค์ ๋น ๋ฅด๊ฒ ๊ด๋ฆฌํ๋ค๋ ์ ์์ FFT๋ฅผ ์ ์ด๋ค๋๊ฑด ์๊ฒ ์ง๋ง ๊ทธ์ด์์ ์ป์ง ๋ชปํ์ต๋๋ค.
D๋ stet-stet์ด Lazy seg๋ก ํ ์ ์๋ค ๊ณ ํ๊ณ , ์ ๋ ์์ฟผ๋ฅ ๋ฌธ์ ๋ฅผ ์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฐ๊ฐ๋ณด๋ค ํ๊ณ ์์์ต๋๋ค. ์ฌ๊ธฐ์๋ถํฐ segment tree ๋์ฐธ์ฌ ๊ฐ ๋ฒ์ด์ก์ต๋๋ค
- ๋๋ ๋๋ฒ์งธ ํ์ฐ์ต (Jakarta 2019) ์ดํ, stet-stet์ด ํ์ฌ ์๋ ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ ๊ตฌํ์1 ๋งค์ฐ genericํ ๊ตฌํ์ผ๋ก ๊ต์ฒดํ ๊ฒ ์ ์ ์ํ์ต๋๋ค
- ์ด ์๋ก์ด ๊ตฌํ์ฒด๋ template ํจ์๋ฅผ ๊ต์ฅํ extensiveํ๊ฒ ํ์ฉํด์, ํฉ์ธ๊ทธ๋ฅผ xor์ธ๊ทธ๋ ๊ณฑ์ธ๊ทธ๋ก ๊ต์ฒดํ๋ ๊ฒ์ด ํจ์ ํ๋๋ฅผ ๊ฐ์๋ผ์์ผ๋ก์จ ๊ฐ๋ฅํ๊ณ ์ ์ฒด์ mod P ๋ฑ์ enforceํ๋๊ฒ์ด ๋งค์ฐ ์ฝ๋ค๋ ์ฅ์ ์ด ์์์ต๋๋ค.
- ์ผ๋ถ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๋ฆฌ๊ฐ ์๋์ ์ผ๋ก ์ต์ํ์ง ๋ชปํ๊ณ , ํ์ดํ๋์ด ์ข ๋์ด๋๋ค๋ ์ ๋ฑ์ด ์กฐ๊ธ ๊ฑฑ์ ์ค๋ฌ์ด ๊ฒ์ ์ฌ์ค์ด์์ผ๋, ์ ๊ธฐํ ์ธ๊ทธ ์ฐ๋ ๋ฌธ์ ๊ฐ ์๊ฐ๋ณด๋ค ์ฆ๊ณ ์ด๊ฑธ ์ ์ด์ฉํ๋ฉด ๊ธฐ๋ณธ๋ฌธ์ ๋ถํฐ ๊ธ๊ด์ธ๊ทธ๊น์ง ์ ์ปค๋ฒํ ์์๋ค๋ ์ ์ด ๊ต์ฅํ ๋งค๋ ฅ์ ์ผ๋ก ๋ค๊ฐ์์ ์ด ๋ณ๊ฒฝ์ approveํ์ต๋๋ค.
- ๋ค๋ง ์ ๋ค๋ฆญํ ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ ๊ตฌํ์ฒด๋ ๋ช๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ๊ฐ์ ์ ๊ธฐ๋ฐํ๊ณ ์์ต๋๋ค. ์ ํํ ๊ฐ์ ์ ์งํฉ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ฒ์ ์ค๋ช ์ ๋ฃ๊ณ ์ฝ๋๋ฅผ ๋ดค์๋๋ ์ถฉ๋ถํด ๋ณด์์ต๋๋ค
- ์ฝ๋๋ฅผ ์์งํด์ผ๊ฐ์ผํ๋ค๋ ์๊ฐ์ ํ์ง๋ง, ๋ฐ๋๋ก ํ ํ๋ฆฟ์ด ์์ฒญ ์ ๋ค๋ฆญํ๋๊น ์ง์ง ๊ฐ์ ๋ผ์ฐ๊ธฐ๋ง ํ๋ฉด ์ฌ์ค S.modify ์ S.query๋ง ์จ์ ํ์์์ง ์์๊น? ๋ผ๋ ์๊ฐ์ด ๋ค์ด์ ๊ทธ๋ฅ ๋จ์ ์๊ฐ๋์ ์ ๋ฏธ์ฌ ๋ฐฐ์ด ๊ฐ์ ์ฃผ์ ๋ค์ ๊ณต๋ถํ๋๋ฐ ํฌ์ํ์ต๋๋ค
๊ฒฐ๊ตญ, ํ์ฅ์์๋ ์ด๋ฐ ๋ฌธ์ ๋ค์ด ์์์ต๋๋ค.
- Stet-stet์ D์ ๋ํ ๊ทธ๋ด์ธํ ํ์ด์ ๋๋ฌํ๊ณ , ์ ๋ 100%๋ฅผ ์ดํดํ์ง๋ ๋ชปํ์ผ๋ ๋์ถฉ ๋ง๋ ๋ฐฉํฅ ์ด๋ผ๋ ์๊ฐ์ ๋ค์์ต๋๋ค. DHDroid๋ ๋น์ทํ๊ฒ ํ๋จํ์ต๋๋ค.
- D๋ ์๋นํ ๋ณต์กํ ํํ์ segtree ํ์ฉ์ ์๊ตฌํ๊ณ , ์๋ฃจ์ ์ ๋ ์ฌ๋ฆฐ Stet-stet์ ์ด ๋ฌธ์ ๋ฅผ ํ ํฌ๋ง์ด ์๋ ์ ์ผํ ํ์์ด์๊ธฐ์ PC๋ฅผ ๋๊ฒผ์ต๋๋ค.
- ์ด ๊ตฌํ์ ๊ฒฐ๊ตญ ๋ํ๊ฐ ๋๋ ๋๊น์ง ์๋ฃ๋์ง ๋ชปํ์ต๋๋ค. ๋์ค์ ๋ฃ๊ณ ๋ณด๋, ์์์ ์ ๋ค๋ฆญํ ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ ๊ฐ ๊ฐ๋ ๊ธฐ๋ณธ์ ๊ฐ์ ์์ ๋ฒ์ด๋ ๊ตฌํ์ด ํ์ํ๋ค๊ณ ํฉ๋๋ค.
F๋ฒ (๋์ถฉ~๋ชฌ์คํฐ~๊ฒ์) ์ ์ ์ DHDroid๊ฐ ์ก์์ต๋๋ค. ๋์ถฉ ์๊ธฐํ๋ ๊ฒ๋ค์ ๊ธฐ์ต์ ๋์ง์ด ๋ณด๋ฉดโฆ
F - ๋์ถฉ ์นด๋๋ก ๋ชฌ์คํฐ ์ก๋ ๊ฒ์
๋์ด๋ : P1 AC Time : After freeze
solve : DHDroid, Gratus907
code : DHDroid, Gratus907
- ๋ง์ฝ, ํ์ฌ ์ด๋ค ๋ชฌ์คํฐ๊ฐ ์๊ณ ๋ด ์์ ๊ทธ ๋ชฌ์คํฐ๋ฅผ ์ก์ ์ ์๋ ๋งค์นญ๋๋ ์นด๋๊ฐ ์๋ค๋ฉด, ๋ฐ๋์ ์ก๋ ๊ฒ์ด ์๋ช ํ๊ฒ ์ต์ ์ ๋๋ค.
- ์ฝ๊ฐ ๋ฐ๋๋ก ์๊ฐํด์โฆ โ๋ฆฌํ์์ โ ์ ๋ฏธ๋ฆฌ ๊ณ ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด
- ๋ฆฌํ์์ ์ด $t_1, t_2$๋ผ๊ณ ํ ๋, $t_1$๋ถํฐ $t_2$ ๊น์ง์ ๋ชฌ์คํฐ๋ค ์ค ๋ช๋ง๋ฆฌ๋ ์ก์ ์ ์์๊น์?
- ๊ทธ ๋ด๋ถ์ ์๋ ๋ชฌ์คํฐ์ ์ข
๋ฅ ๋งํผ์ ์ก์ ์ ์์ต๋๋ค. ์ด๋ฅผ
score
๋ผ ํ๊ฒ ์ต๋๋ค. - ๋๋จธ์ง ์นด๋๋ค์ ๋์ถฉ ์๋ฌด๋ ๊ฒ๋ ๋ฒ๋ฆฌ๋ฉด ๋ฉ๋๋ค.
- $t_1$ ๋ถํฐ $t_2$ ์ฌ์ด์ ๋ฆฌํ์ด ๊ฐ๋ฅํ๋ ค๋ฉด, ๊ทธ ์ฌ์ด ๊ฐ๊ฒฉ์ด $\ceil{K/2}$ ๋ณด๋ค ์ปค์ผ ํฉ๋๋ค.
๋ฆฌํ ์์ ์ ๊ณ ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ํ์ (์ด์ฐจํผ ๋ฆฌํ ์์ ์ด ๊ณ ์ ๋์ด ์๋ค๋ฉด ์ ๋ต์ด ์ ์ผ) ํ๋ค๋ ์๊ธฐ๋ฅผ DHDroid์ ๋๋ด์ต๋๋ค. ๋ญ๊ฐ DP์ ์ ๊ทผ๊น์ง๋ ์ฝ์ต๋๋ค.
- ์ฆโฆ๋ค์๊ณผ ๊ฐ์ DP๋ฅผ ํ ์ ์์ผ๋ฉด ๋ฉ๋๋ค. \(D[i] = \max \{ D[j] + \text{score}(j+1, i) \mid 1 \leq j \leq i - \ceil{K / 2}\}\)
์ด DP๋ฅผ ๊ฝค ์ค๋ ๊ณ ๋ฏผํ๋ค๊ฐ, ์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ ์ ๋ณด๋ ๋์ค DHDroid๊ฐ โ$D[j] + \text{score}(j+1, i)$ ๋ฅผ ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ก ๊ด๋ฆฌโ ํ๋ ํ์ด๋ฅผ ์ ์ํ๊ณ , ๊ฑฐ์ ํ์ด์ฝ๋ฉ์ ๊ฐ๊น๊ฒ ๊ตฌํํ์ต๋๋ค. ์ด ๊ณผ์ ์์ D๋ฒ์์ ์ด ๋ ์ด์ง์ธ๊ทธ ๊ตฌํ์ ์ฌ์ฉํ๋๋ฐ, ํ๋ ธํธ๋ฅผ ํ์ดํํ๋ค๊ฐ ์คํ๊ฐ ์์์์ ๋ชจ๋ฅด๊ณ ๊ณ์ ์ ์ถํ๋ฉฐ ํ๋ฆฌ๋ ๋ฑ(โฆ) ๋์ฐธ์ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด ๋ฌธ์ ๋ ๋์ด๋๊ฐ P1์ด๊ธฐ๋ ํ์ง๋ง, ์์งํ ๊ทธ๋ ๊ฒ๊น์ง ๊ณ ์ ํ์ด์ผ ํ ๋ฌธ์ ์๋ค๋ ์๊ฐ์ด ๋ค์ง๋ ์์ต๋๋ค. ๊ตฌํ์์ ์ค์๊ฐ ๋ผ์ํ๋๋ค.
F๋ฅผ ๋ง์ถ๊ณ ๋์๋, Stet-Stet์ด D๋ฒ๊ณผ ๊ณ์ ์ธ์ฐ๋ ๋์ I (์ฌ๊ฑด์ ์งํ์ ), M(x+ +x) ๋ฑ์ ์ฝ์์ต๋๋ค. DHDroid์ ์ ๊ฐ (์ฌ์ค DHDroid๊ฐ ๊ฑฐ์ ํผ์) I๋ฒ ํ์ด๋ ๋ ผ์๋์ ์์ฑํ๋๋ฐ, ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค์ ๊ทธ ๋ ธ๋๋ค์์ SCC๋ฅผ ๋๋ฆฌ๋ ๋ฌธ์ ๋ก ์๋นํ ๊ตฌํ์ด ๋นก์ธ์ง๋ง ์๊ฐ๋ง ๋ง์๋ค๋ฉด (๊ณผ์ฐโฆ?) ํ ๋งํด ๋ณด์์ต๋๋ค. :(
Post Mortem
UCPC๋ ํญ์ PS์ ์ฆ๊ฑฐ์๊ณผ ์ฐ๋ฆฌ ์ค๋ ฅ์ ๋ฏธ์งํจ์ ๊นจ์ฐ์ณ์ฃผ๋ ๋ํ์ ๋๋ค. ICPC์ ๋นํด ์ข๋ OI-ํฑํ ๋ฌธ์ ๊ฐ ๋์์ ๋ ๊ทธ๋ฐ๊ฒ ๊ฐ๊ธฐ๋ ํฉ๋๋ค.
์ฌํด์ ์๋ก์ด ํ์ Stet-Stet์ ๊ฝค ๋์ ํ๋ฅ ๋ก ์ ๋ ๊ฐ์ด ์ ๋ง์ง๋ง ICPC๋ฅผ ๋ธ๊ฑฐ ๊ฐ์๋ฐ, ์ด์ ๋ฑํ CP ์ฑ์ ์๋ ๋ฏธ๋ จ์ ์์ง๋ง ์ด๋ฒ ๋ํ์์ ๋๋๊ฑธ ๋์ถฉ ์ ์ด๋ณด์๋ฉดโฆ.
- ํ๋ ธํธ์ ๊ตฌํ์ฒด๋ฅผ Black-box๋ก ํ์ฉํ๋ ๊ฒ์ ์๋นํ ์ํํจ์ ๊นจ๋ฌ์์ต๋๋ค. ๋ง์ฝ ์ ๋ค๋ฆญํ ๊ตฌํ์ฒด๋ฅผ ์ ๋ DHDroid๊ฐ ์ดํดํ๊ณ ์์์ผ๋ฉด ํจ์ฌ ํธํ์ ๊ฒ์ ๋๋ค. ์ดํดํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์๊ฐ์ด ๋ง์ด ๋๋ ๊ตฌํ์ฒด๋ผ๋ฉด ์ฐจ๋ผ๋ฆฌ ๊ฐ๊ฒฐํ ๊ฒ์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ๋์ ์๋ ์์๊ฒ ์ต๋๋ค.
- ๋ฐ๋ฉด์, ์ ํฌ์ฒ๋ผ ๊ตฌํ๋ ฅ์ด thinking์ ๋นํด ๋ง์ด ๋ธ๋ฆฌ๋ ํ์ ํ๋ ธํธ์ ์ต๋ํ ๋ง์ ๊ฒ์ packingํด๊ฐ๋ ๊ฒ์ด ์ ํจํฉ๋๋ค. ๋น์ฅ ์ ํฌ๊ฐ ๋ชปํ๊ธฐ๋ ํ์ง๋ง E(LR-Flow), M(FFT) ๋ฑ ๋ ์ฌ๋ ธ๋๋ผ๋ ํ๋ ธํธ๊ฐ ์์๋๋ผ๋ฉด ์์ ๋ชป๋์ ๋ฌธ์ ๋ค์ด ๊ฝค ์์์ต๋๋ค.
๋ํ๊ฐ ๋๋๊ณ ๋ ์์ ๋ถํฐ Hashcode ๋ฑ์ผ๋ก ํจ๊ปํ๋ Coffeetea, Dlwocks31์ด ์๋ก ํ๊ณผ ๋๊ธฐ์ธ Nevivurn์ ์์ ํด์ ๊ฒฐ์ฑํ Industrial Function Agent2 ์ ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ์ต๋๋ค. :blobaww: ์ด์ชฝํ๋ ์๋นํ ์ฌ๋ฐ๋๋ฐ, ์ฌ๊ธฐ๋ F๋ฅผ ํ์ง ๋ชปํ ๋์ C๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ์ ํฌ๋ ๋น๊ตํ์ ๋ ์๋ฐํ ๋ ผ์ฆ๋ณด๋ค๋ ์ง๊ด๋ ฅ์ด ๋ฐ์ด๋ ํ์ ๊ตฌ์ฑ์ด ํฐ ์ํฅ์ด ์์ง ์์๊ฐ ์ถ์ต๋๋ค.
์ด๊ธฐํ์ ๋ด๋ ค๋จ๋ algorithmic thinking์ ๋์ฐพ๊ธฐ ์ํด Dlwocks31๊ณผ (+ ๋ ํ์ ํ์๋ค ํจ๊ป) weekly rehab ์คํฐ๋๋ฅผ ๊ฒฐ์ฑํ๊ธฐ๋ก ์๊ธฐํ์ต๋๋ค.
์ค๋๋ง์ ์คํ๋ผ์ธ ๋ํ์น๊ณ ๋ ์๋นํ frustratingํ์ต๋๋ค. Competition์ ๋ด๋ ค๋์์ผ ๋ ์ฆ๊ธธ ์ ์์ํ ๋ฐ ํ๋ ์๊ฐ๋ ๋ค๊ณ โฆ ๊ทธ๋๋ ๊ฐ์ธ๋ํ์๋ค๋ฉด 5์๊ฐ์ ์ ๋ฐ ๊ตฌํ์ค์๋๋ฉด ์ง์คํ์ง ๋ชปํ์ํ ๋ฐ, ํ๋ํ๋ผ์ ์ข๋ ์ฌ๋ฐ๊ฒ ์น๋ฅผ ์ ์์ง ์์๋ ์ถ์ต๋๋ค.
Kudos to my dear teammates - Stet-stet & DHDroid :)
-
์ ํฌ (3ํผํ ๊ทผ์ฒ) ๋ ์ดํ ๋์ ํ์ด ํ๋ ธํธ์ ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ฅผ ์ ์ด๊ฐ์ผํ๋ค๋๊ฒ ์ฌ์ค ์กฐ๊ธ ์์ํ์ง๋ง, PS๋ฅผ ์ฐ ๋จ์๋ก ์ฐ ์ ๋ ์์งํ ์์์ ์ธ๊ทธํธ๋ฆฌ๋ฅผ ์ค์์์ด ๊ตฌํํด์ฌ ์์ ์ด ๋ณ๋ก ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๊ฐ๋ณด๋ค 25ํ์ด์ง๊ฐ ๋ง์์ ๋ฃ์์์๋๊ฒ ๋ง๋๊ตฐ์โฆย โฉ
-
์ด๊ณณ์ ํ์ ์ด๋ฆ์ ์์1, ์์2, ์์3์ธ๋ฐ, ๋๊ฐ 1/2/3์ธ์ง์ ๊ตฌ๋ถ์ ์๊ณ ๊ทธ์๋ฆฌ์์ ๋๋คํ๊ฒ ์ด๋ฆํ๋ฅผ ๋๋ ๊ฐ์ง๋ฏ ํ์ต๋๋ค. ใ ใ โฆย โฉ