Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

jay153의 PS 일지

ABC 396 본문

AtCoder

ABC 396

jay153 2025. 3. 9. 16:20

https://atcoder.jp/contests/abc396

 

 

Performance Rating : 1616

 

A

$v[i-1]=v[i]=v[i+1]$인 $i$가 존재하는지 찾는 문제였다.

 

B

평범한 스택 문제였다.

 

C

어떤 색깔의 공을 고르던 있는 공 중 가장 큰 것을 뽑는 것이 이득이고 흰 공의 경우에는 검은 공 개수 이하로 고를 때 최댓값을 찾아주어야 한다. 그러므로 정렬과 누적합, 누적 최댓값을 활용하여 답을 구했다.

 

D

$N\leq 10$이라는 점에 주목했다. $O(N!)$이 충분히 돌아가는 작은 수이기 때문에 모든 경로를 다 살펴볼 생각을 했다. $1$부터 $N$까지의 수가 모두 있는 $N!$개의 순열을 생각하자. 각 순열에서 $1$과 $N$사이에 있는 숫자들을 순서대로 방문한다고 생각하면 모든 경로를 다 볼 수 있다. $N!$개의 수열에 대해 경로의 값을 모두 구해 최솟값을 구해주면 답을 구할 수 있다. 답이 $10^{18}$보다 큰 경우가 있는데 $LINF$의 값을 $10^{18}$으로 두어 WA를 한번 받았다.

 

E

그래프 모델링을 하면 풀릴 것 같았다. $X_i$와 $Y_i$를 가중치가 $Z_i$인 간선으로 연결한다고 생각했다. 사이클 중 간선의 가중치를 모두 Bitwise xor 했을 때 0이 나오지 않는다면 -1을 출력하면 된다. 그런 사이클이 없다면 한 정점의 값 0으로 두었을 때 그 정점과 연결된 다른 모든 정점들의 값을 구해놓고 비트별로 개수를 세어 합을 최소로 만들어줄 생각을 했다. 디버깅 과정에서 for문의 범위를 실수하여 한 번의 WA를 받고 for문의 범위를 고쳤음에도 WA가 나왔다. 당연히 맞은 줄 알고 F에 넘어갔다가 F를 풀고 E를 틀린 것을 확인한 뒤 다시 돌아왔다. 논리상 틀릴 것이 없다고 생각하여 한참을 고민하다가 비교연산이 비트연산보다 우선순위가 큰데 비트연산에 괄호를 씌우지 않아 틀렸다는 것을 30분 만에 발견했다. 비트연산자에는 괄호를 씌우는 것을 습관화해야겠다.

 

F

$A$에서 inversion number을 구해주고 $A_i=A_i+1\;\mathrm{mod}\;M$으로 바꾸는 과정을 $M-1$번 해주는 것으로 생각했을 때 inversion number에 어떤 변화가 생기는지 살펴보니 다른 숫자들의 크기 관계는 변경되지 않고 가장 큰 수가 가장 작은 수로 바뀌기만 한다는 것을 관찰했다. 따라서 각 숫자의 인덱스 번호만 저장해두면 $A_i=A_i+1\;\mathrm{mod}\;M$으로 바꾸었을 때 inversion number을 구해줄 수 있으므로 이를 통해 구했다.

 

G

E에서 너무 많은 시간을 낭비해 문제를 고민할 충분한 시간이 남지 않았다.

'AtCoder' 카테고리의 다른 글

ABC 398  (0) 2025.03.23
ABC 397  (0) 2025.03.15
ARC 194 - Div 2  (0) 2025.03.10
ABC 395  (0) 2025.03.02
ARC 193 - Div 1  (0) 2025.02.24