티스토리 뷰
JAG Practice Contest 2020 D. Surround the Castle
성을 둘러싸는 것은 격자에서 상하좌우로 이동하며 사이클을 만드는 것으로 볼 수 있으므로, 성을 둘러싸는 최단 경로를 찾는 방식으로 접근합니다. 성을 둘러싸는 경로만을 생각해야 하는데, 이는 성에서 반직선을 하나 그어 그 선을 홀수 번 지나는 경로만을 생각하면 됩니다. (반직선을 그어 다각형 내부에 있는지 판별하는 것과 비슷한 방식) 그러므로 반직선을 홀수 번 지난 상태와 짝수 번 지난 상태를 구별하여 다익스트라를 돌리면 문제를 해결할 수 있습니다. 다익스트라의 시작점을 잡아야 하는데,

BOI 2021 A. A Difficult(y) Choice
먼저 이분 탐색을 통해
에서 선택한 수가 있는 경우
에서만 선택하는 경우
가장 적은
알아야 하는 수는
JOI 2020/2021 Spring Training Camp 1-3. Food Court
1번부터 N번까지 상점을 스위핑하면서 쿼리의 답을 오프라인으로 계산합니다. 모든 1, 2번 쿼리에 대해 L번 상점을 볼 때 그 쿼리를 활성화시키고, R+1번 상점을 볼 때 그 쿼리를 비활성화시킵니다. 현재 보는 상점에 3번 쿼리가 있을 때, 그 3번 쿼리가 들어온 '시간'까지 활성화된 쿼리들을 생각하여 답을 구해야 합니다. 일단 그 상점에 있는 사람 수만 구해봅시다.
2번 쿼리에서
이렇게 생각하면 3번 쿼리의 답은 3번 쿼리가 들어온 시간에서 (상점의 사람 수) - (상점의 하한)이라고 생각할 수 있고, 이는 (3번 쿼리까지의 사람 변화량의 합) - (3번 쿼리까지 상점에 있었던 사람 수의 최솟값)이 됩니다. 이를 '시간'에 대한 세그먼트 트리로 구현하면 그 상점의 있는 사람 수를 계산할 수 있습니다.
이제 3번 쿼리에서 그룹 번호를 구해봅시다. 상점의 있는 사람 수를 구했으므로, 서비스를 제공할 사람이 온 뒤에 상점에 온 사람의 수를 구할 수 있습니다. 이 사람 수를
JOI 2020/2021 Spring Training Camp 4-3. Worst Reporter 4
문제에서 조건이 '
모든 조건에 대해
트리에서 만족해야 하는 조건은 부모의 레이팅이 자식의 레이팅보다 높아야 합니다. 다음과 같이 DP 배열을 정의합니다.
번 정점을 루트로 하는 서브트리에서 번 정점의 레이팅을 이하로 하는 비용의 최솟값
이 DP 테이블을 그냥 계산하기에는 레이팅의 범위가 너무 넓습니다. 그러므로 DP 테이블의 값이 변하는 지점만을 std::map과 같은 자료구조로 저장합니다. 정점
정점
위의 방식으로 그냥 계산하면

이제 사이클이 합쳐진 정점에 대해 처리해야 합니다. 이 정점의 레이팅의 후보는 사이클에 포함된 정점들의 원래 레이팅 값들과 레이팅의 최댓값
'PS' 카테고리의 다른 글
PS 문제 풀이 [2021.10] (2) | 2021.10.26 |
---|---|
PS 문제 풀이 [2021.6] (0) | 2021.06.07 |
PS 문제 풀이 [2021.3] (0) | 2021.03.21 |