문제 링크
- http://icpc.me/17518
업보를 청산하기 위해 만들었습니다.
어 이거 웰노운인데… / 이건 당연히 아는 거 아닌가? 라는 생각이 날 때마다 추가하겠습니다.
2018, 2019년 대회는 참가를 해서 각각 2등과 1등을 했고, 2020년에는 대회 운영에 참가해 대회 현장 운영진, 문제 검수, 해설 슬라이드 작성, 문제 해설 등 다양한 업무를 담당했습니다.
이 글에서는 2020년 천하제일 코딩대회의 모든 문제의 풀이를 소개합니다.
여담으로, 해가 갈수록 문제가 점점 어려워지는데 올해(2021년) 대회는 어떤 문제가 나올지 기대가 됩니다.
이진 트리는 일반적인 트리에 비해 효율/구현에서 많은 이점을 갖고 있습니다. 자식의 개수가 2개 이하로 일정하고, 트리의 순회 순서를 강제하기 쉬우며, 모든 정점의 차수가 3 이하라는 성질을 갖고 있는 이진 트리는 일반적인 트리에서는 적용하기 어려운 다양한 알고리즘을 적용할 수 있게 해줍니다.
놀랍게도 모든 트리는 이진 트리로 변환할 수 있습니다. 이 글에서는 주어진 트리의 조상-자손 관계, 그리고 정점 간의 거리를 유지하면서 선형 시간에 이진 트리로 변환하는 방법을 다룹니다.
2018 NYPC에서 우승하신 yclock님께서 상금으로 받은 500만원의 10%를 기부하셨다는 소식을 들은 적이 있습니다. 브랜디 대회 상금 규모가 매우 크다는 것을 알고, 참가 신청을 하면서 “100만원 이상 받으면 상금의 10%를 기부하겠다”고 선언했습니다. 결국 1000만원을 받았고, 100만원을 후원하기로 했습니다.
저부터 기부를 하면 나중에는 좋은 문화가 형성되지 않을까요? 많은 사람들이 기부를 했으면 하는 마음에서 이 글을 작성합니다.
키타마사법(Kitamasa Method, きたまさ法)은 $A_N = c_1A_{N-1} + c_2A_{N-2} + \cdots + c_KA_{N-K} = \sum_{i=1}^{K} c_iA_{N-i}$와 같은 선형 점화식의 $N$번째 항을 $O(K^2 \log N)$, 더 나아가 $O(K \log K \log N)$에 계산하는 알고리즘입니다.
이 글에서는 키타마사법을 최대한 쉽게 설명하는 것에 초점을 두기 때문에 엄밀한 증명이 생략될 수 있습니다. 양해 부탁드립니다.