티스토리 뷰
2020/06/27
길었던 시험기간이 끝나고 다시 PS에 복귀했다.
2020년 IOI 대표 선발고사가 2주 앞으로 다가왔으니, 이제 PS에 집중해서 공부해야겠다.
https://codeforces.com/contest/1373
Dashboard - Educational Codeforces Round 90 (Rated for Div. 2) - Codeforces
codeforces.com
새벽에 에듀 코포 버추얼을 돌았다. 코포를 안한지 너무 오랜 시간이 지나서 감이 다 떨어졌다... A 푸는데 13분, B푸는데 27분의 처참한 실력이었지만 2시간 안에 어찌저찌 F까지 풀어서 100등정도 했다. F는 정해와는 다른 풀이지만 JOIOC 2019 송금과 비슷한 방법으로 이분탐색으로 풀었다. (사실 함수의 볼록성을 가정하고 삼분탐색으로 열심히 비벼보려고 했지만 결국 이분탐색으로 풀렸다.) 코포 실력이 엄청 떨어진 것을 실감할 수 있었던 것 같다.
오늘부터 선발고사에 기하 문제가 100% 나온다는 확신을 갖고(?) 하루에 기하문제를 적어도 한문제씩은 풀어야겠다.
그래서 기본적인 Graham's Scan, Andrew's Algorithm을 다시 한번 짜봤다. (기하를 손절하다 보니 다시 짜는거도 익숙하지 않았다...)
https://www.acmicpc.net/problem/15974
15974번: 공룡 발자국
표준 출력으로, 첫 번째 줄에는 가장 많은 발가락을 가진 발자국 다각형의 꼭짓점의 개수 T를 출력한다. 다음 T개의 각 줄에는 발뒤꿈치부터 시작하여 반시계 방향으로 돌면서 각 꼭짓점의 x좌표
www.acmicpc.net
문제에서 요구하는 그대로 $dp1(i, j)$, $dp2(i, j)$를 발가락에서 골로, 골에서 발가락으로 가는 간선을 이용할 때 점의 최대 수라 정의하면 Naive 하게 $O(N^3)$의 dp 풀이가 나온다. $(i, j)$ -> $(j, k)$ 의 transition에서는 $j$하나만 고정된다는 점을 이용하면 누적 최댓값의 느낌으로 최댓값을 뿌려줄 수 있고, $O(N^2logN)$ 의 풀이가 나온다.
https://www.acmicpc.net/problem/16191
16191번: Utilitarianism
The first line contains two integers $n$ and $k$ ($2\leq n\leq250,000$, $1\leq k\leq n-1$), which are the number of cities in RUN-land, and the number of roads to choose. Each of the next $n-1$ lines contains three integers $u,\ v,\ c$ ($1\leq u,\ v\leq n$
www.acmicpc.net
또, 오늘부터 플3~다5 정도 되는 문제들을 좀 많이 빨리 푸는 연습을 하기로 했다.
https://www.acmicpc.net/problem/3012
3012번: 올바른 괄호 문자열
문제 여는 괄호와 닫는 괄호로만 이루어져 있으면서, 다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 한다. 빈 문자열은 올바른 괄호 문자열이다. A가 올바른 괄호 문자열이라면, (A), [A]
www.acmicpc.net
단순히 가장 왼쪽 칸과 매칭될 칸을 나이브하게 정해주고, 그 구간 기준으로 두 개로 쪼갠 후 DP를 하면 된다. 구간의 개수가 $O(N^2)$, 각 구간마다 매칭될 칸을 정하는데 $O(N)$이니, $O(N^3)$에 문제를 해결할 수 있다. 여담으로 출력이 매우 귀찮은 형태여서 약간의 꼼수로 오버플로우를 유도한 후 오버플로우 결과와 모듈러 결과를 비교해서 해결했다. (28분)
https://www.acmicpc.net/problem/16119
16119번: Cherrypick
SNUPC(SNU Patisserie Cafe)에서는 유명한 케이크를 팔고 있다. 이 케이크는 N개의 행과 N개의 열로 나눌 수 있는 정사각형 모양이다. 그리고 이 케이크를 1 × 1 크기의 정사각형 조각 N2개로 잘랐을 때,
www.acmicpc.net
일단 격자의 수들이 1000 이하이고, 거리함수가 체비셰프 거리의 제곱임에 집중하자. 만약 거리가 $sqrt(1000)$ 이상이라면 $A[i][j]-dist^2$값이 음수가 되어서, 가장 넓게 정사각형을 잡아도 최대 31칸임을 알 수 있다. 따라서 각 줄마다 길이 0, 2, 4, ..., 62칸짜리 구간 중 최댓값을 전처리해놓고, 전처리한 값들을 순회하며 각 칸에 대해 따로따로 답을 구해주면 된다. 시간 복잡도는 $O(N^2*sqrt(1000))$이다. 처음에 전처리 값을 슬라이딩 윈도우로 데큐를 이용해서 구하다가 시간초과를 받는 등의 삽질을 해서 시간이 꽤 오래 걸렸다. (48분)
https://www.acmicpc.net/problem/2912
2912번: 백설공주와 난쟁이
문제 백설 공주와 난쟁이 N명과 함께 숲 속에 살고 있다. 난쟁이는 매일 광산에 일하러가고, 백설 공주는 그동안 페이스북을 하고 있다. 매일 아침 난쟁이는 한 줄로 휘파람을 불면서 광산으로 ��
www.acmicpc.net
예전에 어디선가 한번 본 문제였다. 일단 과반수의 가장 유용한 성질은 구간을 여러 개로 쪼갰을 때 전체의 과반수는 그 구간들 중 적어도 하나의 과반수여야 한다는 것이다. 일단 구간 내에 특정 색의 수를 세는 문제는 이분 탐색을 이용해 쉽게 풀 수 있다. 그러니 세그먼트 트리 하나를 관리하며 그 구간 중에서 과반수를 넘는 것을 전처리하자. 이제, 쿼리를 답할 때는 그 구간에 해당하는 세그먼트 트리의 $O(logN)$개의 노드들의 과반수 값이 모두 후보이며, 이를 각각 세주면서 전체 과반수 조건을 만족하는지 확인한다. (15분)
https://www.acmicpc.net/problem/17139
17139번: 습격자 초라기와 쿼리 (Normal)
첫째 줄에는 정수 N, Q, W가 공백으로 구분되어 주어진다. (2 ≤ N ≤ 250 000, 1 ≤ Q ≤ 250 000, 1 ≤ W ≤ 100 000) 둘째 줄에는 점령 직후 구역 1 – N에 존재하는 포로의 수가 공백으로 구분되어 주��
www.acmicpc.net
쿼리가 없다면 일반적인 DP문제인데, 쿼리가 있으니 DNC segment tree를 생각할 수 있다. 기본적으로 선택할 수 있는 최대 구간이 두칸이므로, 양쪽 구간에서 2줄 중 어떤 칸을 먹을지 4가지 경우의 수를 양쪽 끝에서 하면 되니, 한가지 상태는$4*4=16$개의 칸을 가진 행렬로 표현된다. 이제 합쳐주는 과정은 $4^3$의 시간을 투자하여 합쳐주면 된다. (28분)
2020/06/28
https://www.acmicpc.net/problem/19055
19055번: Nutella's Life
The first line contains an integer $n$, the number of contests in the schedule ($1 \leq n \leq 10^5$). The second line contains $n$ integers $a_i$ ($-10^9 \leq a_i \leq 10^9$).
www.acmicpc.net
단순한 CHT 문제이다. dp(i) = i번째 대회에 참가했을때까지의 누적 보상의 최댓값 이라 정의하면 $dp(i)=max(dp(j)+(i-j)(i-j-1)/2+A[i])$ 꼴의 점화식이 나오고 식 정리를 하면 $A[j]<=A[i]$인 $j$에 대해서 저 식 중 최댓값을 찾는 문제가 되고, 이는 펜윅 트리에 CHT 자료구조를 하나씩 박아서 해결할 수 있다. 또한, CHT 에 쿼리 넣는 값이 단조 증가함을 이용해 전체적으로 $O(NlogN)$에 해결하도록 할 수 있지만, 이것을 구현했을 때 맞왜틀로 인해 시간을 조금 날렸다. (42분)
https://www.acmicpc.net/problem/1805
1805번: 나무수송
문제 양항승 왕국은 거의 모든 지역이 강과 숲으로 이루어져 있다. 상류의 작은 강들은 모여서 큰 강이 되며, 그 강도 다른 강과 만나 더 커져 나중에는 하류로 가면 거대한 강 하나만이 남아 양�
www.acmicpc.net
2020/06/29
11503
18916
1848
'PS(공부) 일지' 카테고리의 다른 글
2020/08/04 (0) | 2020.08.04 |
---|---|
2020/05/04 ~ 2020/05/10 (0) | 2020.05.06 |
2020/04/30 ~ 2020/05/03 (0) | 2020.05.01 |
- Total
- Today
- Yesterday
- Greedy
- stack
- Line sweeping
- tree
- Parametric Search
- offline
- Floyd-Warshall
- Union Find
- Merge Sort
- Sqrt Decomposition
- convex hull
- APIO
- Interactive
- Fenwick Tree
- ioi
- Segment Tree
- HLD
- Persistent Segment Tree
- Divide & Conquer
- BOJ
- Centroid Decomposition
- Sparse Table
- Codeforces
- graph
- Shortest path
- DP
- CHT
- ⭐
- DFS
- Lazy Propagation
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |