티스토리 뷰

요즘 유사코 골드를 돌고 있습니다!



Balanced Photo


  먼저 소들의 키를 1~N 범위로 압축해줍니다. 그런 뒤 1~N번 소까지 순회하며 BIT를 이용해 키가 $[h_i+1, N]$ 범위에 있는 소들의 합을 $L_i$에 저장합니다. $L_i$를 채운 뒤에는 자신의 키도 BIT에 업데이트해줍니다. $R$ 배열은 순회 순서를 반대로 해서 채워줄 수 있습니다. 이 과정을 모두 마친 뒤 $Min(L_i, R_i) * 2 < Max(L_i, R_i)$를 만족하는 소들의 개수를 세 주면 됩니다. 시간복잡도는 O(NlogN)입니다. 간단한 자료구조 문제였습니다!



Hoof, Paper, Scissors (Gold)


  DP 문제입니다. DP값 두 개를 관리하면서 답을 구해나가는데, $DP1[i][j] =$ 1~i번째까지 최대 j번 바꿨을 때 최대 승수로 정의하고 점화식을 세우면, $DP1[i][j] = Max(DP2[i][j][0], DP2[i][j][1], DP2[i][j][2])$이고, 여기서 $DP2[i][j][k] =$ k는 마지막으로 바꾼 제스쳐의 종류, 즉 H, P, S 중 하나이고, 최대 j번 바꿨을 때 1 ~ i 범위에서 가장 많이 이길 수 있는 승수로 정의합니다. $DP2[i][j][k] = Max(DP2[i-1][j][k] +$ i번째에 이길 수 있는지의 여부(1 or 0)$, DP1[i][j-1])$입니다.

  점화식이 다소 복잡하지만, 먼저 N^2K DP를 짠 뒤 시간을 줄이려고 하다보면 이런 꼴의 점화식이 나오게 됩니다. DP1은 원래 점화식이고, DP2는 최대 연속 부분합 DP 같은 느낌이라고 생각하시면 될 것 같습니다.



안대 낀 스피드러너 (원제 : Cow Navigation)


  한글 디스크립션을 중심으로 설명하겠습니다. 스피드러너가 두 사람이고, 한 사람은 오른쪽을 보고 시작하고 다른 한 사람은 위를 보고 시작한다고 생각하면 좀 더 생각하기 편합니다. 오른쪽을 보고 시작한 스피드러너를 R, 위쪽을 보고 시작한 스피드러너를 U라고 합시다. 이제 상태 BFS를 돌릴건데, (R의 X좌표, R의 Y좌표, U의 X좌표, U의 Y좌표, R이 보는 방향) 이렇게 다섯 가지 변수를 가지고 다니면 됩니다. U의 방향은 R의 방향에서 반시계방향으로 90도 돌린 방향이기 때문에 따로 들고 다니지 않아도 됩니다.

  상태의 개수, 즉 정점 수는 $4N^4$개이고, 이는 약 64만개 정도입니다. 이 정도면 충분히 시간 안에 돌 수 있습니다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함