GCJ 2015 R1A 후기

풀이 스포 주의. 일단 결과부터 말하자면 1047위로 아슬아슬하게 떨어졌다. R1B랑 R1C가 있으니 문제는 없지만 작년 정올 이후로 거의 문제를 안 풀었더니 실력이 줄어든것 같아 슬프다.

A

A에서 시간 낭비를 많이 한 게 탈락의 가장 큰 원인이라고 생각된다. 문제 이해를 잘못해서 2번 케이스에서 rate가 정수여야 한다고 멋대로 가정하고 풀면서 왜 예제 마지막 케이스가 244인지를 이해하지 못하고 있었다. 5분컷 가능한 문제인데 30분만에 AC.

B

풀이는 금방 찾았는데 코드에서 B랑 N을 헷갈리는 바람에 이것도 시간을 쓸 데 없이 썼다. 풀이 자체는 time으로 파라메트릭 돌리는 전형적인 문제.

C

처음에 접근한 방법은 컨벡스헐 구하고 컨벡스헐 위의 두 점을 O(N^2)으로 잡고 적절히 영역을 잘 잡아서 영역안의 점들을 하나씩 제거하면서 처리하면 O(N^2 + N)에 되지 않을까 했는데 이렇게 저렇게 바꿔봐도 안 되길래 포기.

두 번째는 왠지 컨벡스헐 구한 다음 한 껍질을 벗기면 다음 컨벡스헐에 포함된 점들의 값은 1이고 그 다음은 2고 이런식으로 나아갈 것이라고 멋대로 추측하고 열심히 짰으나 예제부터 안 나옴. 짜기 전에 잘 볼 걸… 짜서 돌려보고 나니까 왜 이게 답일 것이라 추측했는지 모르겠다.

시간이 얼마 안 남았길래 틀린 코드들을 짜면서 중요한 부분은 다 짰으니 급하게 지수 알고리즘으로 C Small이라도 풀어서 내려고 했으나 WA. 아직 어디를 틀렸는지 못 찾았는데 이것도 B처럼 멍청한 실수를 했을듯한 기분이 든다.

C Large가 풀면서 실력 쌓기 좋은 문제라고 판단되어 대회 끝나고 생각하는 중이었는데 그 직후 트위터에 Bumsoo Park가 올린 C 풀이를 보고 말았다. 다행히 내 의식의 흐름 속에 있었던 풀이라 많이 안타깝지는 않았다. 가장 처음 접근했던 방법을 convexhull-wise에서 point-wise로 바꿔서 처리하면 된다고 한다.

C 코드 저장해 뒀다가 틀린 부분 찾고, 나중에 C Large 짜 보는 것으로 하고 R1A는 여기서 마무리.

댓글 남기기