PS/CP

Educational Codeforces Round 116 (Rated for Div. 2)

leo020630 2023. 6. 22. 08:03

지난 Div.1의 여파 이후 이틀을 쉬고 버츄얼을 다시 돌았다.


A. AB Balance (0:07, +) *900

A치고 좀 어려웠던 것 같다. 뭔가 복잡한 풀이가 떠올랐는데, 아닌 것 같아서 좀더 생각해 보니 첫 글자와 마지막 글자가 같기만 하면 된다는 사실을 알 수 있었다.

 

B. Update Files (0:13, +1) *1100

현재 파일 수가 \(k\)보다 적으면 계속 2배가 되고, 아니라면 \(k\)씩 더해진다. 앞은 반복문으로 대충 처리하고, 뒤는 나눗셈으로 횟수를 구해주면 된다. 그냥 무지성 반복문을 썼다가 TLE를 한 번 받아버렸다.

 

C. Banknotes (0:25, +) *1400

대충 어떻게 하면 될 지는 보이는데, 구현이 귀찮다. 앞부터 그리디하게 처리해주면 된다. 개수는 뒤 동전과의 액수 차이를 이용하자. 자세한 설명은 생략하겠다.

 

D. Red-Blue Matrix (1:53, +) *2400

처음 봤을때 뭔가 바로 생각이 안 났고, E가 많이 풀렸길래 도망갔다 다시 잡았다. \(k\)를 옮겨가며 처리해주자. 우선 왼쪽을 먼저 봤을 때, 색을 구분하려면 잘 나누어지는 경계를 찾아야 한다. 이는 각 행의 왼쪽 부분에서 최솟값, 최댓값을 구간으로 표현했을 때 빈 부분을 말한다. 이는 set 등으로 각 행의 왼쪽/오른쪽 최소/최댓값을 관리해주고 pair를 정렬하면 찾을 수 있다. 이러한 상황은 최대 \(O(NM)\)번 발생하기 때문에, 이 때마다 오른쪽 역시 잘 나누어지는지 빠른 시간 안에 체크할 수 있다면 문제를 해결할 수 있다. 이 역시 비슷한 아이디어로 set을 관리해주면 해결할 수 있다. 왼쪽에서 정한 색에 따라 오른쪽이 잘 나누어지는지 같은 방법으로 판단하고, set 역시 잘 관리해주자. 막 어렵진 않은데 스위핑에 익숙해야 하고 할 게 좀 많아서 까다로웠던 것 같다.

 

E. Divide Square (1:14, +) *2100

\(N\)이 500이므로 \(O(N^3)\) DP를 시도해보자. \(dp[n][x]\)를 문제와 같은 상황에서의 답이라고 하자. 우선 \(n>x\)면 모든 영웅이 한 번에 죽으므로 dp값은 \(x^n\)이다. 그렇지 않을 경우, \(y\)명이 생존했다고 가정하자. 그러면 \(dp[n][x]\)에 \(dp[n-y][x-y+1] \times (n-1)^k \times {n \choose y}\) 만큼을 더해줄 수 있다. 이를 모든 \(y\)에 대해 반복해주면 된다.

 

버츄얼이던 본 대회던 *2400 난이도 정도의 문제를 푸는 빈도가 늘어난 것 같아서 좋다. 지난 Div.1 B도 2500이 찍혔는데, 열심히 풀어냈음에도 불구하고 네 글자를 지우지 않았고 랜덤을 몰랐다는 이유로 레드 가는 라운드에서 1솔한 라운드가 되어버렸다. 레이팅에 너무 연연하는 것은 당연히 좋지 않지만, Div.1은 대회가 워낙 자주 없어서 이렇게 기회를 놓치면 슬픈 건 어쩔 수 없는 것 같다.

'PS > CP' 카테고리의 다른 글

CodeChef Starters 99 (Div. 2)  (0) 2023.07.23
CodeChef Starters 98 (Div. 4)  (1) 2023.07.18
Codeforces Round 751 (Div. 1)  (0) 2023.06.17
Codeforces Round 665 (Div. 2)  (3) 2023.06.16
Educational Codeforces Round 102 (Rated for Div. 2)  (1) 2023.06.16