전체 글
-
NYPC 2021 본선 후기일기장 2021. 10. 31. 22:43
대회 시작 전 대회가 시작하기 전, 노트북을 점검하는 시간에 코드블럭을 키고 몇가지 코드를 짜서 돌려봤습니다. NYPC는 휴리스틱 문제가 자주 나오는 편이기 때문에, 난수를 생성하는 mt19937을 짜서 돌려봤는데 무슨 이유에선지 컴파일 에러가 났습니다. 그래서 그냥 rand()를 쓰기로 하고 일단 넘어갔습니다. 다른 코드도 몇 개 짜봤는데 range-based for가 작동하지 않고 컴파일 에러가 났습니다. 알고보니 코드블럭 기본 세팅이 c++98로 되어있었고, 스태프의 도움을 받아 c++11로 컴파일을 할 수 있게 되었습니다. 버전을 올리니 mt19937도 정상적으로 돌아갔고, 별 문제가 없었습니다. 0:00~0:30 NYPC 본선은 일반적으로 난이도 순으로 문제가 나오기 때문에, 쉬운 1번과 2번은..
-
샤모스-호이 알고리즘 (Shamos-Hoey Algorithm)알고리즘 2021. 9. 22. 15:35
서론다음과 같은 문제를 생각해봅시다. "좌표평면에 $N$개의 선분이 있고, 이들 중 서로 교차하는 선분 쌍이 존재하는지 판별하라." 이 문제를 푸는 가장 간단한 방법은 모든 선분 쌍에 대해 서로 교차하는지 판별하는 것입니다. 선분 쌍은 $O(N^2)$개이고, 두 선분이 교차하는지는 $O(1)$에 판정할 수 있기 때문에 시간복잡도는 $O(N^2)$이 됩니다. 이 글에서는 위 문제를 $O(N\log{N})$에 풀 수 있는 샤모스-호이 알고리즘에 대해 설명하겠습니다. 가정알고리즘을 소개하기에 앞서, 몇 가지 가정을 하도록 하겠습니다. 1. $y$축에 평행한 선분이 존재하지 않는다.2. 한 선분의 끝 점이 다른 선분이나 끝 점 위에 있는 것도 교차하는 것이다.3. 세 선분이 한 점에서 교차하는 경우는 존재하지 ..
-
NYPC 2021 예선 풀이 및 후기일기장 2021. 8. 26. 22:33
NYPC 2021 예선이 종료되었습니다. 작년에 비해 문제 퀄이 많이 떨어진 것 같아서 개인적으로 좀 아쉬웠습니다. 문제마다 그냥 처음 떠오른 풀이를 바로 짜다보니 세그먼트 트리를 이용한 풀이가 좀 많습니다. 다른 쉬운 풀이가 있을 수 있으니 다른 블로그 풀이도 참고하면서 보면 좋을 것 같습니다. 1일차 1번) 계단 문제 요약 1층부터 $M$층까지 있는 건물의 $F$층에서 시작해서, 계단을 한 층 오르는 것을 $N$번하려고 할 때 엘리베이터를 타는 횟수의 최솟값을 구하는 문제입니다. 풀이 더보기 $M$층까지 올라간 후, 엘리베이터를 타고 1층으로 가는 것을 반복하는 것이 최적의 전략입니다. $M$, $N$이 크기 때문에 식을 세워서 풀면 $O(1)$에 답을 계산할 수 있습니다. 코드 더보기 #includ..
-
코드포스 GM(레드) / solved.ac Ruby V 달성 후기일기장 2021. 8. 22. 21:14
8/1에 코드포스 레드, 8/16에 solved.ac 루비를 찍었는데 여름학교랑 오렌지컵 운영 때문에 시간이 없어서 이제 글을 올리게 되었다. (사실 핑계고 귀찮았음) 코드포스 레드는 Round 732에서 핵을 엄청 많이 성공해서 두 자리 등수를 찍고, Round 736에서 수학 문제들만 나와서 ABC + D1을 1시간 23분만에 다 풀어서 갈 수 있었던 것 같다. 아직 레드를 안정적으로 유지할 실력은 안 되는 것 같고 앞으로 연습을 많이 해야할 것 같다. 8/16에는 클9를 따면서 루비를 가게 되었다. 링컷 비빔밥 + 오렌지컵 문제로 레이팅 N점을 날먹하긴 했는데 뭐 어쨌든 루비를 찍었다. 언젠가 IGM 후기나 solved.ac 마스터 후기를 올릴 수 있게 되면 좋겠다.
-
KOI 2021 고등부 후기일기장 2021. 7. 25. 19:57
오늘 고등부 KOI 2차 대회가 있었습니다. 시험을 보기 전엔 은 중상위권 정도만 했으면 좋겠다고 생각했는데, 점수가 생각보다 잘 나와서 기분이 좋네요. 0:00 ~ 0:20 일단 1번을 열었는데, 1번이 생각보다 어려웠습니다. 가능한 동심원 크기의 최댓값은 루트(N)에 비례한다는 사실과, dp 전처리를 잘 섞으면 O(N루트N) 정도에 풀 수 있습니다. (N = A+B) 0:20 ~ 0:57 어려웠던 1번과 달리, 2번은 풀이가 바로 보였습니다. 1번 정점의 가중치를 x라고 두면 dfs를 돌면서 나머지 정점들의 가중치를 x에 대한 식으로 나타낼 수 있고, 이분그래프가 아닌 케이스들만 처리를 해주면 쉽게 해결이 가능합니다. 이분그래프인 경우, x의 값을 마음대로 설정할 수 있는데, 최솟값을 찾기 위해 저는..
-
CEOI 2019 Day 1일기장 2021. 7. 22. 02:44
어제 저녁 7시부터 12시까지 지인들이랑 CEOI 2019 Day 1 셋 버춸을 돌았다. 버춸 돌기 전에 내가 너무 못할까봐 걱정이 많이 됐는데 생각보다 점수가 엄청 잘 나와서 기분이 좋다. 특히 3번문제는 백준에서 다1문제인데(Dynamic Diameter) 운이 좋아서 풀이를 빨리 찾을 수 있었다. 참고로 플랫님은 3번 73점까지 풀이를 아는데 구현을 안 했다고 하고, 이환님도 73점 아는데 귀찮아서 안 했다고 한다 ㅋㅋ; 0:00 ~ 0:13 난이도 순서를 모르기 때문에 문제를 차례대로 읽으면서 나이브 + 인간섭태를 차례로 긁고, 그나마 쉬워보이는 문제에서 더 점수를 긁는 방식으로 전략을 세웠다. oj.uz에도 한국어 지문이 없어서 영어 지문을 읽어야 했지만 문제 내용이 간단해 빠르게 읽을 수 있었..
-
백준 18779 풀이 (Help Yourself)문제풀이 2021. 6. 15. 14:02
문제 링크: https://www.acmicpc.net/problem/18779 18779번: Help Yourself (Platinum) Bessie has been given $N$ ($1\le N\le 10^5$) segments on a 1D number line. The $i$th segment contains all reals $x$ such that $l_i\le x\le r_i$. Define the union of a set of segments to be the set of all $x$ that are contained within at least one segment. www.acmicpc.net 문제 설명: [1, 2N] 구간에 선분이 N개 있을 때, 2^N개의 모든 선분의 부분집..
-
백준 9208번 풀이 (링월드)문제풀이 2021. 5. 28. 15:10
문제 링크: https://www.acmicpc.net/problem/9208 9208번: 링월드 링월드는 반지모양으로 이루어진 나라이다. 이 나라에는 도시가 m개 있고, 편의상 0, 1, 2, ... m-1로 번호가 매겨져 있다. 이 도시는 반지모양을 이루고 있으며, 0, 1, 2, m-1, 그리고 다시 0 순서이다. www.acmicpc.net 풀이) 일단 그래프 모델링을 해봅시다. 이분그래프 G = (A, B)를 생각할건데, |A| = N, |B| = M이고, i번째 구간이 [j, k]일 때, A에서 i번째 점을 B에서 [j, k] 점들과 연결합시다. 이렇게 하면 문제가 "그래프 G에서 A를 덮는 매칭이 존재하는가?"로 변하게 됩니다. 이 상태로 segment tree를 이용하여 문제를 해결할수도 ..