Post

Codeforces Round 910 (Div. 2)

Codeforces Round 910 (Div. 2)

2023년 11월 20일에 진행한 코드포스 910번 대회 일지입니다. 적당히 빠른 4솔을 했고 오렌지 초중반대 퍼포가 나와서 올해 nm번째 퍼플에 왔습니다.

0:00~0:03

  • A번을 잡았습니다.
  • 시키는 대로 하되 맨 앞에서부터 바꿔주면 됩니다.
  • 구현했고 맞았습니다.

0:03~0:10

  • B번을 잡았습니다.
  • 발상 1(2분): 뒤에서부터 보면 됩니다. 어떤 수가 그 직후의 수에 의해 조건을 만족하지 않는다면 만족하도록 최소한의 수로 나누어주면 됩니다. 이것을 맨 뒤의 수를 제외하고 모두에 대해 반복합니다.
  • 구현했고 맞았습니다.

0:10~0:14

  • C번을 잡았습니다.
  • 무슨 소린지 이해를 못했습니다.
  • D가 더 많이 풀렸다는 소리를 듣고 D를 잡으러 갔습니다.

0:14~0:38

  • D번을 잡았습니다.
  • 발상 1(5분): 숫자가 작은 게 묶여있는 곳과 큰 게 묶여있는 곳을 swap하는 것이 좋습니다.
  • 발상 2(~10분): 식으로 작성해봅시다: $a_i$에 $a, b$가 있고, 그에 대응하는 $b_i$에 $a+x,b-y$가 있다고 합시다. 이 둘을 바꾸어 이끌어낼 수 있는 차이는 $abs(2b-2a-x-y) - (x+y)$입니다. (단 $x,y \geq 0$)
  • 발상 3(~16분): 이는 $a_i+b_i-abs(a_i-b_i)$ 중 최대에서 $a_i+b_i+abs(a_i-b_i)$중 최소를 빼는 것과 동치입니다. 따라서, (값을 바꾸지 않는 행동이 가능하다는 것을 유념해야 합니다,) 식은 다음과 같습니다.
    • 원래 식의 beauty값 $k$, $a_i+b_i-abs(a_i-b_i)$의 최댓값 $x$, $a_i+b_i+abs(a_i-b_i)$의 최솟값 $y$에 대해, $k+max(0,x-y)$
  • 구현했고 맞았습니다.

0:38~1:12

  • C번으로 돌아왔습니다. 문제를 이해했습니다.
  • 발상 1(3분): 최단거리와 같은 기우성을 가지고 최단거리보다 긴 경로는 모두 가능합니다.
    • 그렇지 않은 경로에 대해서는 NO를 출력합니다.
    • 가능하다면, 그냥 왼쪽과 아래 벽면을 따라서 이동할 수 있도록 alternating colored path를 만들어줍니다. 그리고, +2k의 길이의 path를 사용할 수 있도록 왼쪽 아래 꼭지점을 주변으로 무한히 머무를 수 있는 cycle을 만들었습니다.
  • 구현했고 subtask 1에서 틀렸습니다.
  • 발상 2(20분): 위 발상은 +4k의 길이만을 사용할 수 있음을 보장합니다. 따라서, 길이 +2를 사용할 수 있도록 해야 합니다. 이는 경로의 임의의 부분에 ㄷ자 경로를 만들어 해결할 수 있습니다.
    • 간단하게 (1,1)에 만들었습니다.
  • 구현했고 맞았습니다.

1:12~1:40

  • E번을 잡았습니다.
  • 생각을 하지 못했습니다.

1:40~2:00

  • 실시간으로 퍼포가 떨어지는 것을 구경하며 퍼플에 갈 수 있을지 아닐지 지켜봤습니다.
  • 간발의 차로 1903(+93)을 달성하며 퍼플에 왔습니다.

후기

  • CD 배점이 둘 다 1750이라, 두 개만 적당히 빠르게 풀어내면 오르겠다고 생각했습니다. 실제로 그렇게 되어서 다행이었습니다.
  • 다만 C, D 모두 시간을 조금 너무 많이 쓴 것 같습니다. 특히 C는 발상 1과 2 사이에서 너무 오래 갇혀 있었습니다.
This post is licensed under CC BY 4.0 by the author.