티스토리 뷰

공부/Problem solving

problem solving 2016.03.16

구사과 2016. 3. 16. 00:03

Network (ICPC Seoul Regional 2007)

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=283&page=show_problem&problem=1903

처음에 DP로 접근했다 시간을 많이 날렸다. (DP 풀이는 잘 모르겠다.) 대충 이런 그리디를 짜서 live archive AC를 먹였는데, 데이터를 믿을 수 없는 저지이기 때문에 (...) 반례가 있다 싶으면 지적해주길 바란다.

 * 리프 노드를 깊이가 큰 순으로 정렬해서 처리한다.

 * 처리중인 노드에서 거리 K 이하에 서버가 없으면 노드의 K번째 조상에 서버를 지어준다. 아니면 넘어간다.


복잡도는 O(N^2)이다.


Superset (CF Yandex 2011 Final)

http://codeforces.com/problemset/problem/97/B

분할정복을 사용한다. 집합을 반으로 가른 후, 왼쪽 셋 1개 / 오른쪽 셋 1개로 쌍을 골랐을 때 그 쌍이 항상 superset이어야 한다. 그렇게 하는 방법은

 * 현재 분할 정복으로 처리하는 구간에 있는 "모든" Y좌표를 모은다.

 * X좌표를 X[m]으로 잡은 후, "모든" Y좌표를 x = X[m] 선에 뿌려준다. (X[m], Y[s]) / (X[m], Y[s+1]) ....

 * 출력 시에 중복 좌표를 주의

참 쉽죠?

이 알고리즘의 정당성은 쉽게 증명할 수 있다. 시간 / 개수 모두 T(N) = T(N/2) * 2 + O(N)을 만족하는 고로 O(NlgN)이다.


Leaders (CF Yandex 2011 Final)

http://codeforces.com/problemset/problem/97/E

임의의 스패닝 트리를 잡고 생각해보자. 쿼리로 들어온 점이 스패닝트리 상에서 홀수 거리면 답은 당연히 Yes이다. 중요한 건 짝수 거리를 처리하는 것이다.

스패닝 트리에 없는 간선을 생각해보자. 이 간선들은 홀수 사이클을 만들 수 도 있고 짝수 사이클을 만들수도 있다. 여기에 대해서 생각해보면 -

* 홀수 사이클을 만든다 : 트리에서 해당 간선을 지나는 경로를 쭉 돌릴 수 있어서, 홀수 거리를 만들어 줄 수 있다.

* 짝수 사이클을 만든다 : 짝수 사이클이 이미 있던 홀수 사이클과 연결되어 있다면 (짝수 사이클을 타고 도달할 수 있다면) 또 하나의 홀수 사이클이 만들어질 수도 있다. 이런 경우에는 홀수 사이클을 만들어 줄 수 있다.

Union Find로 사이클을 묶어주고, LCA로 질의를 처리해주면 풀 수 있다. 비슷한 문제는 JOI 2014 Camp의 전압. http://koistudy.net/?mid=prob_page&NO=1040


Double Knapsack (CF Wunder Fund 2016)

http://codeforces.com/contest/618/problem/F

먼저 배열을 부분합의 형태로 바꾸고, b(j) >= a(i)를 만족하는 최소의 j를 각각의 i = (0 ~ n)에 대해서 구한다. 이 값들은 모두 0 ~ n-1 범위에 속한다.

비둘기집의 원리에 의해, n+1개의 값이 n개의 경우를 가지면 하나의 값은 중복된다. b(j) - a(i) = b(j') - a(i') 라는 뜻인데, (j < j') 이는 b(j') - b(j) = a(i') - a(i) 라는 식으로 전개할 수 있다. 고로 불가능한 경우는 없고 답은 항상 존재한다.

'공부 > Problem solving' 카테고리의 다른 글

KOI 2014 안전한 비상연락망 풀이  (1) 2016.03.25
Codeforces - CROC 2016, IndiaHacks Final  (0) 2016.03.19
Sign on Fence (CF 276E)  (0) 2016.03.12
가까운 만유인력 (BOJ 9482)  (0) 2016.03.10
Closest pair of points problem  (0) 2016.03.10
댓글
공지사항
최근에 올라온 글
Total
Today
Yesterday