UCPC 2021 본선 후기

 예선에 이어 본선에서도 이재명! 이재명! 이재명! 이재명! 팀으로 참여했습니다. (거듭 강조하지만, 팀명은 정치와 무관합니다.) UCPC 본선은 예선과 달리 오전에 시작하다 보니, 혹시라도 팀원(또는 본인)이 늦잠자느라 지각하는 경우가 있지 않을까 걱정했었는데, 다행히도 그럴 일 없이 다들 대회 시작 1시간 전에 도착했습니다. 1시간동안 대충 수다떨다가 문제 어떤 순서로 읽을지 정했는데, jame0313님이 A부터, kyaryunha가 B부터, 제가 C부터 읽기로 했습니다.


 대회 진행 초반(~60분)

 예선처럼 ABC가 쉽게 나오지 않을까 하는 예상과 달리, 만만한 문제가 없었습니다. 그나마 A의 경우 레이지 세그로 풀 수 있을 것 같다는 얘기가 나와서, jame0313님이 계속 잡기로 했지만, B와 C는 상당히 어려운 문제인 것 같아 다른 문제부터 보기로 했습니다. 저는 그다음으로 F를 봤는데.. 여기서 망했음을 직감했습니다. F는 문제 제목부터 대놓고 이 문제를 오마주 한 것 같은 문제였는데.. 딱 봐도 나만 모르는 수학 웰노운 문제 같은 느낌이 나더군요. 실제로 원본 문제(2018 UCPC)도 실제로 IMO에 출제됐던 (나만 모르는) 웰노운 문제였기도 하고요. 그래서 일단 F를 바로 치워두고 I와 L을 봤는데, 이쪽도 쉬운게 없어보였습니다.

 대회시작 8분후, 스코어보드에서 퍼솔(first solve)이 등장하기를 기다리던 kyaryunha가 H 퍼솔이 나왔다는 소식을 듣고 H를 잡기 시작했습니다. 비슷한 시기에 저도 K번 문제를 읽고 좀 생각해보다가, H 퍼솔 소식을 듣고 H로 옮겨갔고, 몇분 뒤에 풀이가 생각나서, H는 제가 잡겠다고 했고, kyaryunha는 D 퍼솔팀이 나왔다는 소식을 듣고 D로 옮겨갔습니다. H는 간단한 조합론 문제였고, 금방 코딩해서 20분경에 AC를 받았습니다.

 한편 kyaryunha는 D가 빡구현 문제인 것 같다고 하면서, 자기가 잡겠다고 해서 저는 퍼솔팀이 나온 F, J, 그리고 아직 푼 팀은 없지만 그래도 풀 수 있을 것 같았던 K를 번갈아가며 보고 있었습니다. F와 K는 감이 아예 안 잡혔고, J는 MITM과 투 포인터를 섞으면 풀 수 있을 것 같아 보였는데, 구현할 자신이 없어서 다른 팀원에게 구현을 부탁하려 했는데 각각 A와 D를 잡고 있어서, 기다릴 겸 퍼솔팀이 나온 E번 문제를 읽기로 했습니다.

 E번은 가위, 바위, 보를 가지고 버블정렬하는 문제였는데, 몇 가지 관찰을 하다보니 정렬 T번을 O(N)에 처리할 수 있는 풀이가 떠올라서 코딩을 시작했습니다. 코딩이 끝날때쯤, kyaryunha는 D를 WA를 받은 후 60분경에 AC를 받았고, 저도 63분경에 AC를 받았습니다.


 대회 진행 중반(~240분)

 kyaryunha가 D를 풀었으니 J번 풀이를 설명하고 코딩을 부탁해 놓았고, F를 계속 손대보다가, jame0313님이 A 구현으로 뇌절을 하는 것 같아서 디버깅을 해드리기로 했습니다. 그런데 막상 제가 가니 알아서 디버깅 잘 하시더군요. 혼자서 반례 찾고 고치고 제출하시더니 4WA를 받은 뒤 TLE를 받았습니다. 이후 최적화 과정에서 WA를 한번 더 받고, 139분쯤에서야 드디어 AC를 받았습니다. 원래 페널티가 적은 편이었는데 이 문제를 풀면서 페널티가 좀 많이 쌓여서 4솔 꼴찌가 되었네요. 결국 저희는 페널티 관리보다는 솔브 수를 늘리는 것을 목표로 하기로 노선을 바꿨습니다.

 한편, 제가 풀이를 어렵게 설명해서 그런지, kyaryunha가 J 구현을 뇌절하기 시작해서, 이 문제 구현을 jame0313님에게 넘기고, kyaryunha는 F를 보기로 했습니다. 그런데 마찬가지로 설명이 어려워서 그런지 jame0313님도 뇌절을 좀 하셨습니다 ㅠㅠ.. 그나마 이번에는 질문 몇번 하시더니 제 풀이를 대충 이해하셔서 구현을 시작하셨습니다. 약 1시간정도 지난 후 구현이 끝나서 제출하셨고, 3WA 하신 뒤 알아서 디버깅 잘 해서 237분에 AC를 받으셨습니다.

 240분이 경과한 시점에서 저희팀은 5솔 최하위권으로 약 25등정도에 위치해 있었고, 수상권으로 진입하려면 무조건 한 문제 이상 더 풀어야 하는 상황이었습니다. (당시 6솔 14팀) 그리고 남은 문제들 중 그나마 풀 만한 문제는 스코어보드상 F번 뿐이었기 때문에, 셋이서 다같이 F를 잡기로 했습니다.


 대회 진행 후반(~300분)

 F번은 jame0313님이 올해 예선문제인 말뚝과 비슷한 느낌의 세그+스위핑으로 풀릴 것 같다고 해서 코딩에 들어가셨습니다. 그런데 곧 p_i < p_j인 경우와 p_i > p_j인 경우에 절댓값 합을 한꺼번에 구할 수 없음을 깨닫고, jame0313님과 저는 대회가 끝날 때까지 뇌절하기 시작했고, kyaryunha는 F를 풀 수 없다는 판단이 들어서인지 K에 무지성 (랜덤) 제출을 하기 시작했고, 마찬가지로 못 풀고 끝났습니다.


github

 대회 결과 5솔브, 페널티 719분으로 29등에 안착했습니다! F 풀기만 했으면 특별상 턱걸이까지는 됐을 것 같은데, 못풀고 끝나서 아쉽네요.. 억울해서라도 저런 빡수학 문제 푸는 연습해야겠습니다. 저만 모르는 웰노운 서러워요 ㅠ