2023 Sogang Programming Contest Open (Master)
2023 Sogang Programming Contest Open (Master)에 참가했다. 전날에 열렸던 Arena #11을 놓쳐서 이번에는 꼭 해야지 생각하며 등록을 하고 잔 것 같았는데, 일어나보니 등록이 안되어있었다. 아레나는 언제쯤 참가할 수 있을까..

A - Knob
00:06 AC
직전의 $L, R$ 값을 갖고 있으면서 매번 확인해주면 된다.
B - donstructive
00:10 AC
$1, N, 2, N-1, \cdots$ 순으로 배치하면 된다.
C - 내 집 마련하기
00:23 AC
$L, R$에 해당하는 인덱스를 정렬시켜 $L$부터 $R$까지 사람에 대해 재배치하면 된다.
D - 서로소 싫어
00:39 WA 00:39 WA 00:40 AC
$x$를 $xy$로, $xy$를 $y$로 만들어주면 주어진 조건을 항상 만족한다.
처음에 갈피를 못 잡아서 푸는 데 오래 걸렸다. 게다가 long long 실수와 '-'부호를 제대로 안 붙여줘서 두 번이나 틀렸다.
E - 어? 금지
00:46 WA 00:49 AC
$dp[i]$를 다음과 같이 정의하자.
$dp[i] = \max \limits_{j, \,t_j < t_i - b_i}{dp[j]} + c_i$
가능한 $j$의 최댓값은 lower_bound로 구할 수 있고, 세그트리로 구간 최댓값을 구해줬다.
세그트리까지는 필요없을 것 같았지만 당장 생각나는 게 세그밖에 없었다.
F - Rush & Slash
01:02 AC
한 번의 베기로 같이 잘리게 되는 잡초들을 분리 집합으로 구한 뒤, 각 집합에서 (0,0)까지의 거리를 모두 구한다.
이 값들을 모두 두 배 곱하여 더하고 가장 큰 값만 한 번 빼주면 된다. (마지막 잡초를 벤 뒤엔 (0,0)로 돌아올 필요가 없기 때문)
H - 같은 풍경
01:31 AC
주어진 점들을 $X, Y$를 기준으로 봤을 때 반시계 방향으로 정렬해두고 이 순서대로 $A_1, A_2, \cdots$라고 하자.
$x$축 위의 임의의 점의 $x$좌표를 $g$라고 하고, 이 $g$가 가질 수 있는 범위를 유추해야 한다.
$A_i$와 $A_{i+1} \, (1 \le i < N)$이 이루는 직선이 $x$축과 만나는 점을 $p_i$라고 하면, $p_i$보다 크거나 작은 $g$에 대해 $(x, 0)$에서 봤을 때 동일한 순서를 얻을 수 있다는 관찰이 필요하다.
$A_i$의 $y$좌표가 $A_{i+1}$의 $y$좌표보다 작으면 $g < p_i$이어야 하고,
$A_i$의 $y$좌표가 $A_{i+1}$의 $y$좌표보다 크면 $g > p_i$이어야 한다.
둘의 $y$좌표가 같은 경우에는 $g$가 어떤 값이든 항상 동일한 순서를 얻을 수 있다.
$p_i$들을 모두 구했으면, 주어진 $x$좌표들 중 모든 조건을 만족하는 점들을 찾아주면 된다.
G - 순열과 연산
02:03 WA 02:08 WA 02:15 WA 02:19 WA 02:32 RTE 02:34 WA
※ "AC"가 아니라 틀린 생각일수도 있습니다!
관찰 1.
2번 연산을 반드시 2회이상 진행해야 모든 수를 동일하게 만들 수 있다. 1번 연산은 수의 위치만 바꿀 뿐이지 값을 변경하진 않기 때문이다.
관찰 2.
$M$번의 연산 중 마지막 연산은 반드시 2번 연산이어야 한다.
위의 관찰을 통해 나올 수 있는 연산의 배치는
2 1 2
2 1 1 2
1 2 1 2
이렇게 세 가지밖에 없다고 생각하고, 이대로 구현했지만 WA를 받았다. 놓친 케이스가 있는걸까.