일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Sieve_of_Eratosthenes
- scc
- graph
- BST
- implementation
- Algospot
- graph modeling
- BFSDFS
- DynamicProgramming
- Segment Tree
- BOJ
- Eulerian path
- Euler path
- Cycle detecting
- CS Academy
- Dag
- hashing
- Shortest path
- mathematics
- bitmask
- dynamic programming
- POJ
- backtracking
- disjoint-set
- Euler circuit
- 백준
- flows
- Eulerian circuit
- Greedy
- GCD
- Today
- Total
그냥 하는 노트와 메모장
Google Kickstart 2019 Round C 본문
Google Kickstart 2019 Round C
coloredrabbit 2021. 4. 6. 23:41소스 코드 위치: Google Kickstart 2019 Round C
A. Wiggle Walk
A 치고 너무 복잡하게 푼 느낌이 든다..
행과 열에 대해서 DSU를 따로 관리한다. 다음에 이동하는 위치가 (ny, nx)라면 인접한 4방향에 대해서 이미 방문한 칸이 있다면 merge해준다. 이 때 DSU에서 관리하는 데이터는 left와 right로 두 변수가 있고, 각각 행 또는 열에서 이미 방문한 칸들에 가장 가까운 작은 값과 큰 값을 말한다.
위와 같이 행과 열 각각 DSU를 관리하면서 상하좌우 이동해주면 된다.
B. Circuit Board
i번째 행 j번째 열을 구성하고자하는 사각형의 우측 하단 꼭지점에 위치한다고 치자. i행만 쓴다면 i행에서 최대값과 최소값의 차이가 K를 넘어서지 않는 좌표가 있고, 거기서 j열까지의 거리가 w1였다고 하자. 여기서 만들 수 있는 사각형의 최대 크기는 1 x w1이다. 다음으로 i-1번째 행까지 포함하여 i-1, i를 사용하여 사각형을 구성할 때, 마찬가지로 (i-1,j)를 포함하여 i-1행에서 최대값과 최소값의 차이가 K를 넘어서지 않는 좌표가 있고, 거기서 j열까지의 거리가 w2라고하자. 그러면 만들 수 있는 사각형의 최대 크기는 2 x min(w1, w2)가 된다. 이렇게 위로 올라가면서 최대값을 계산해주자.
[최대값과 최소값을 K이하로 하는 좌표 찾기]
map을 적절히 사용하여 투포인터를 이용하면 구현할 수 있다. c++ 상 map은 정렬된 키로 관리하기 때문에 이 특성을 이용하여 현재 V[i, j]에 해당하는 값과 K 초과 차이가 발생하는 모든 열 인덱스를 삭제하고, 삭제된 값 중 가장 큰 값에서 하나 오른쪽으로 이동한 인덱스가 바로 그 좌표가 된다.
C. Catch Some
관찰 포인트가 몇 가지 있다.
1. 입을 셔츠의 색을 결정하고 일단 한 번 강아지들을 방문(observe)하고 나면 이 셔츠의 색을 다시 입을 필요가 없다.
명백하게도 다시 입는 과정은 그만큼 방문하는 것은 손해다.
2. 각 셔츠의 색을 방문하는 과정은 독립적이다. 즉, 색에 대한 순서는 결과에 상관없다.
3. 마지막에 입는 셔츠의 색에 대해서만 강아지들을 방문하고 나서 집에 돌아올 필요가 없다. 즉, 색 중 단 하나만 집으로 돌아올 필요가 없다.
이를 토대로 상태를 정의한다.
dp[color][k][flag] = color 색에 대해서 k마리의 강아지를 방문해야하고, flag가 1이면 이미 마지막에 입을 색이 결정됐음을, 0이라면 마지막에 입을 색이 결정되지 않았음을 말한다. |
위처럼 상태를 정의하면 나머지 부분은 다이나믹 프로그래밍으로 진행하면 된다.
'Contest, Other tests > Google kickstart 2019' 카테고리의 다른 글
Google Kickstart 2019 Round B (0) | 2021.04.01 |
---|