diff --git a/_posts/2023-12-30-scioi23.md b/_posts/2023-12-30-scioi23.md new file mode 100644 index 00000000000..c38224f08c4 --- /dev/null +++ b/_posts/2023-12-30-scioi23.md @@ -0,0 +1,59 @@ +--- +title: SciOI 2023 Open Contest +author: Annyeong1 +date: 2023-12-30 20:30:00 +0900 +categories: + - CP + - BOJ +tags: + - cp + - boj_contest + - boj +math: true +mermaid: true +--- +12월 30일 진행한 서울과학고등학교 SciOI 대회이자 16번 아레나 대회 일지입니다. 5시간 중 2시간 반 정도 잡은 것 같습니다. + +## 0:00~0:06 +- A1번을 잡았습니다. +- 그냥 한번에 $mk-1$명씩 이동하는 아이디어가 되는 문제였습니다. +- 맞았습니다. + +## 0:06~0:09 +- A2번을 잡았습니다. +- 그냥 시키는 대로 하면 됩니다. +- 맞았습니다. + +## 0:09~0:40 +- C1번을 잡았습니다. +- 발상 1(9분): 짝수나 1이라면 불가능합니다. +- 발상 2(10분): 처음에 어디를 지우고 남은 턴동안 상대가 지운 것의 반대쪽을 지우는 행동을 취할 수 있으면 됩니다. 즉 가운데에 괄호가 있으면 됩니다(아닙니다). +- 틀렸습니다. + +## 0:40~1:10 +- 점심을 먹었습니다. 제육볶음이 맛있었습니다. + +## 1:10~1:30 +- 발상 3(75분): 가운데에 괄호가 있지 않아도 됩니다. 하나씩 지워가면서 올바른 괄호열이 나오는지 직접 확인해야 합니다. +- 구현했고 맞았습니다. + +## 1:30~1:55 +- A3번을 잡았습니다. +- 발상 1(5분): 중간고사를 기준으로 정렬하고 커트가 될 수 있는 곳들을 잘 찾을 수 있습니다. 이들을 모두 저장하고 왼쪽 것을 고른 뒤 오른쪽 것을 중간 위치 근처로 lower_bound하면 $O(n \log n)$입니다. +- 커트가 될 수 있는 곳을 찾는 과정에서 실수를 여러 개 해서 고치고 맞았습니다. + +## 1:55~2:28 +- B1번을 잡았습니다. +- 발상 1(5분): 만약 출발지점으로 돌아오는 조건이 있다면, 지나는 모든 간선은 정확히 두 번 세집니다. +- 발상 2(10분): 즉, 임의의 간선에 대해, 루트 방향으로 있는 정점의 수를 x개, 반대 방향의 정점을 n-x개로 두면 둘에서 합쳐서 k개를 뽑는 경우의 수의 두 배만큼 세집니다. 이제 여기서 출발지점으로 돌아오는 것을 빼면 됩니다. +- 발상 3(20분): 돌아올 때의 경로는 아예 다른 방법으로 세줄 수 있습니다. k개를 고르면 그중 가장 깊은 것이 도착지가 되므로, 깊이를 고르고 그 깊이 이내에서 k개가 골라지는 것의 수를 찾아 그것에 깊이를 곱한 것을 위에서 빼면 됩니다. +- 구현했고 맞았습니다. + +## 2:28~3:00 +- B2와 C2의 부분점수를 보았습니다. +- 귀찮아서 포기했습니다. + +## 후기 +- 33등을 했습니다. 문제가 나름 재미있었던 것 같습니다. +- C1을 7틀한 것이 아쉽지만 이정도면 잘 풀어내지 않았나 싶습니다. +- SS에 달성하며 학교에서 학년 1등이 되었습니다.