SlideShare a Scribd company logo
1 of 56
Download to read offline
2016 UCPC 풀이 ㅇ
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
2016. 08. 20
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
A. 배열
정답 팀 : 3
가장 처음 푼 팀 : HanzoGak (김진표, 박상수, 박성민)
출제자 : myungwoo (전명우)
해설작성자 : myungwoo (전명우)
해설자 : myungwoo (전명우)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
배열
• Are you good at using Splay Tree?
• Splay Tree
• 이진 탐색 트리
• 하지만 특별한 연산 한 개가 있다…
• splay(i)
• 노드 i를 이진 탐색 트리의 루트로 만든다.
• 응용: splay(j, i)
• 노드 j를 노드 i의 바로 아래에 붙인다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
1) Zig step
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
2) Zig-zig Step
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
3) Zig-zag Step
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
배열
• 이제 splay를 적절히 이용해서 flip, shift를 구현하면 된다!
• Subarray의 shift는 flip 3번으로 구현이 가능하다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
배열
• Flip은 어떻게 구현할까?
• Flip(l, r)이 이루어진다고 하자
• splay(l-1), splay(r+1, l-1)
• [l, r]에 해당하는 부분 이진탐색
트리를 만들고,
lazy propagation으로 구현
r+1
l-1
[l, r]
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
배열
• 3번은 이진탐색트리에서 i번째 수를 구하는 연산
• 4번은 각 수에 해당하는 노드 포인터를 미리 배열로 가지고,
해당 노드를 splay , 그러면 왼쪽 서브트리 크기+1이 답.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
배열
• Splay 트리의 시간복잡도는?
• 앞서 설명한 방식으로 splay를 구현하면 모든 연산이
amortized O(lg n)라는 것이 증명됨
• 다만 splay를 자주해줘야함
• 예를 들어, 이진탐색트리에서 search한 이후 search로 나온 노드를 splay
• 예를 뜰어, 이진탐색트리에서 insert한 이후 insert한 노드를 splay
• 최소, 최대, 합의 구현은?
• 각 노드별로 노드를 루트로 했을 때 서브트리의 최소, 최대, 합을 저장
• Zig, zig-zig, zig-zag 과정에서 관련 자료를 실수없이 계산
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
B. 최대 클리크 구하기
정답 팀 : 45
가장 처음 푼 팀 : Anti-ACG (박범수, 박서홍, 박성관)
출제자 : myungwoo (전명우)
해설작성자 : kriii (김경근)
해설자 : kriii (김경근)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
구간 그래프
두 정점 𝑖, 𝑗사이에 간선이 있으려면, [𝑆𝑖, 𝐸𝑖]와 [𝑆𝑗, 𝐸𝑗]사이에 공통된 부분
이 있어야 합니다.
즉, 𝑆𝑖 ≤ 𝑥 ≤ 𝐸𝑖와 𝑆𝑗 ≤ 𝑥 ≤ 𝐸𝑗를 동시에 만족하는 𝑥가 있으면 됩니다.
조금 간단하게 적으면 max 𝑆𝑖, 𝑆𝑗 ≤ 𝑥 ≤ min(𝐸𝑖, 𝐸𝑗)를 만족하는 𝑥가 존
재하면 됩니다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
구간 그래프의 클리크
𝑛개의 정점 𝑖1, … , 𝑖 𝑛사이의 모든 두 정점간에 간선이 있으려면, 아까 전의
식을 모두 연립해 볼 때,
max 𝑆𝑖1
, … , 𝑆𝑖 𝑛
≤ 𝑥 ≤ min 𝐸𝑖1
, … , 𝐸𝑖 𝑛
를 만족하는 𝑥가 존재하면 됩니다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
구간 그래프의 클리크
이제 역으로 어떤 𝑥를 정했을 때, 𝑆𝑖 ≤ 𝑥 ≤ 𝐸𝑖를 만족하는 모든 𝑖를 찾으면
그것이 클리크를 이룬다는 것을 알 수 있습니다.
주어진 구간의 좌표를 압축하고 𝑥가 증가하는 순서로 스위핑을 하여 최대
한 많은 구간을 통과하는 𝑥를 찾아 𝑂(𝑁𝑙𝑔𝑁)에 문제를 해결할 수 있습니
다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
C. 분단의 슬픔
정답 팀 : 2
가장 처음 푼 팀 : ACG (최석환, 윤지학, 조승현)
출제자 : myungwoo (전명우)
해설작성자 : myungwoo (전명우)
해설자 : myungwoo (전명우)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
분단의 슬픔
A진영에 무조건
들어가야하는
사람들
B진영에 무조건
들어가야하는
사람들
진영에 상관없는 사람들
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
분단의 슬픔
• 위와 같이 그래프를 만들고 max-flow를 구하면 된다
• Max-flow = min-cut
• 위 그래프에서 cut하나는 필연적으로 하나의 분단 구성을 의미하고, 그
때 cut 비용이 슬픔 정도의 합이기 때문!
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
분단의 슬픔
• 여기서, 2가지를 더 신경써줘야한다
1. Running time: Ford-Fulkerson TLE, Dinic 0.48초, Optimal 0.02초
2. (일부러 함정을 판 건 아닌데…) newline...
• 출력 형식에 3개의 줄을 출력하고, 진영에 속한 사람이 없으면 빈 줄을 출력하라고 명시
• ”1n2n”은 두 개의 줄로 판단… (POSIX 정의에서 한 줄의 끝은 newline…)
• 이걸로 고생한 팀이 있어서 죄송할 따름입니다…
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
D. Flowey’s Love
정답 팀 : 2
가장 처음 푼 팀 : ACG (최석환, 윤지학, 조승현)
출제자 : functionx (배근우)
해설작성자 : functionx (배근우)
해설자 : functionx (배근우)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
최적해로 가능한 그림
• 당신과 친절 알갱이의 속력이 1이므로 항상 개선된 경로를 만들 수 있다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
TSP 문제로 변형 가능
• 방문하는 점의 순서를 지정
• 각 점을 최대한 빨리 방문한다.
• 답을 Brute-Force로 구하면 O(𝑛!) 이므로 시간초과가 난다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
비트 DP 식 정의
• DP[1100100][4] : 0, 1, 4번 점을 방문하며, 마지막으로 4번 점을 방
문할 때 걸리는 최소 시간 (불가능하면 -1으로 처리)
• DP[bit][a]에서 DP[bit+2b][b]로 뿌려주는 방식으로 답을 계산
• DP[bit][a]초 후 상태에서 a번 점에서 b번 점으로 가는 시간 계산
• 시간복잡도는 O(𝑛2
∙ 2 𝑛
) 이다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
점들 간의 도달시간 계산
• 점 A와 반직선 BB’가 있으면 반직선 위에 AC=BC
인 점 C를 잡아야 함
• BC의 길이를 x로 놓고 벡터 방정식을 세워서 풀면
x를 구할 수 있음
• 만약 답이 되는 지점이 직사각형 영역 밖에 있으면
점이 직사각형 안으로 들어올 때까지 기다려야 함
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
E. 닉네임에 갓 붙이기
정답 팀 : 69
가장 처음 푼 팀 : Never give up (이승재, 이창수, 장홍준)
출제자 : functionx (배근우)
해설작성자 : functionx (배근우)
해설자 : functionx (배근우)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
E. 닉네임에 갓 붙이기
• gets, fgets, getline 등을 이용하여 줄 단위로 입력합니다.
• strlen 함수를 이용하여 문자열의 길이를 구한 후, for문과 if문을 이용해
서 첫 공백을 찾습니다.
• 우선 god을 출력해준 다음, 첫 공백 이후의 문자들을 출력해줍니다. 다
만, 공백은 출력하지 말아야 합니다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
F. 행복 유치원
정답 팀 : 62
가장 처음 푼 팀 : ACG (최석환, 윤지학, 조승현)
출제자 : myungwoo (전명우)
해설작성자 : kriii (김경근)
해설자 : kriii (김경근)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
F. 행복 유치원
처음 모든 학생이 한 조에 들어가면 키 차이는 𝑥 𝑁 − 𝑥1입니다.
[𝑥1, … , 𝑥𝑖, 𝑥𝑖+1, … , 𝑥 𝑁]
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
F. 행복 유치원
𝑥𝑖, 𝑥𝑖+1를 기준으로 조를 나누면 키 차이가 𝑥𝑖+1 − 𝑥𝑖줄어듭니다.
𝑥1, … , 𝑥𝑖 [𝑥𝑖+1, … , 𝑥 𝑁]
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
F. 행복 유치원
즉, 조를 하나 늘리려면 𝑥𝑖+1 − 𝑥𝑖중 하나를 선택해 줄이면 됩니다.
그러므로 𝑥𝑖+1 − 𝑥𝑖를 내림차순으로 정렬하여 앞의 𝐾 − 1개를 선택 하여
𝑥 𝑁 − 𝑥1에서 빼면 됩니다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
G. 이것도 해결해 보시지
정답 팀 : 3
가장 처음 푼 팀 : hYEAHyea (고지훈, 강한필, 이종원)
출제자 : xhark (김재홍)
해설작성자 : xhark (김재홍)
해설자 : kriii (김경근)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
Check about
𝐴𝐵 = 𝐶
모두 𝑁 × 𝑁행렬이기 때문에, 𝑂(𝑁3)의 시간이 걸려야 체크할 수 있습니다. 빠
른 행렬 곱셈 방법이 있기는 하지만, 이런 식으로는 아무리 빨라도 𝑂(𝑁2)은 불
가능합니다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
Freivalds’ algorithm
𝐴𝐵𝑣 = 𝐶𝑣
𝑣가 𝑁 × 1행렬이라고 할 때 𝐴(𝐵𝑣)순서로 계산하면 𝑂(𝑁2)의 시간에 위의
식이 참인지 체크 가능하며, 𝑣가 0과 1로 이루어진 행렬이라고 하더라도
½이상의 성공 확률을 보장합니다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
출제자의 변
𝑣의 원소로 가능한 범위가 더 커지면 확률이 어떻게 변할까?
𝐴𝐵𝑥 = 𝐶𝑥의 근은 어떤 형태일까?
별해는 FFT
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
H. 범죄 파티
정답 팀 : 23
가장 처음 푼 팀 : Anti-ACG (박범수, 박서홍, 박성관)
출제자 : Acka (김현정)
해설작성자 : Acka (김현정)
해설자 : Acka (김현정)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
2-SAT 접근
• i의 입장에서: (iA || iB)
• i, j에게 변호를 요청받은 A에 대해서: (!iA || !jA)
• !iA => iB, !iB => iA, iA => !jA, jA => iA
• 모든 (x1 || y1) 절을 만족하는 문제.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
2-SAT 접근
• 파티 비용을 정하고 => Parametric Search
• 모든 조건들을 만족할 수 있는지를 조사한다.
• 각 친구들에게 용의자 친구는 두명까지만 존재하므로
한 번의 2-sat에 소요되는 시간은 O(E) => O(N)
• 시간복잡도 O(NlogN)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
이분매칭 접근
• 용의자 i에 대해서: i -> Ai, i - >Bi
• 전체 N명의 용의자에 대해 최대 매칭이 N이면 가능하다.
• 역시 파티 비용을 먼저 잡고 => Parametric Search
• Hopcroft-Karp: worst Nsqrt(N) 짱짱 이분매칭 알고리즘
• 사실 이런 거 필요없고,
용의자와 친구 간의 관계가 최대 2:2를 보장하므로 그리디도 가능합니다^^..
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
I. 포스터
정답 팀 : 2
가장 처음 푼 팀 : ACG (최석환, 윤지학, 조승현)
출제자 : myungwoo (전명우)
해설작성자 : functionx (배근우)
해설자 : functionx (배근우)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
2D에서의 접근
• Plane-Sweeping을 이용하여 각 y-축에 대해 포스터가 보이는 길이를
구한 후, y-좌표의 차이를 곱하여 더함.
• 따라서 우리는 1D에서의 포스터 문제를 풀면 됨.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
1D에서의 접근
• 좌표 정렬은 이미 한 상태라고 생각.
• Segment Tree 등을 이용하여 1번 포스터부터 덮으면 O 𝑁2 𝑙𝑜𝑔𝑁 으
로 TLE가 날 수도 있음.
• Union-Find를 이용하여 N번 포스터부터 덮는 방법을 사용한다. 이 경
우 시간복잡도는 O 𝑁2 𝛼(𝑁) 이다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
Union-Find 알고리즘
• 맨 처음에 next[i]를 i+1로 초기화
index 1 2 3 4 5 6 7 8 9
next 2 3 4 5 6 7 8 9 10
post - - - - - - - - -
• S~E 범위를 포스터로 채우면 됨
index 1 2 3 4 5 6 7 8 9
next 2 3 5 5 6 7 8 9 10
post - - N N - - - - -
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
Union-Find 알고리즘
• S, next[S], next[next[S]], …를 채우므로 이미 채워진 곳은 안 채워짐
index 1 2 3 4 5 6 7 8 9
next 2 6 6 6 6 7 8 9 10
post - N-1 N N N-1 - - - -
• next 배열의 값을 일일이 바꾸면 O 𝑛2
이다. 하지만 Union-Find 알
고리즘을 이용하여 이를 O 𝑛 으로 줄일 수 있다.
• Cover(3, 4, N)에서는 union(3, 4)를 한다. 이때 next의 값은 3이 있는
컴포넌트의 루트 노드에서만 바꾸면 된다.
• 비슷하게, Cover(2, 5, N-1)은 union(2, 3), union(3, 5)를 한다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
J. 내일로 여행
정답 팀 : 50
가장 처음 푼 팀 : bubble_bath_with_ntopia (김인섭, 박성원, 한수
환)
출제자 : functionx (배근우)
해설작성자 : functionx (배근우)
해설자 : functionx (배근우)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
J. 내일로 여행
• 내일로 티켓을 샀을 때의 그래프와 사지 않았을 때의 그래프 두 개에 대해
서 처리한다.
• M-1개의 경로에 대해서 최단경로를 구한다.
• 플로이드-워셜 알고리즘을 이용하면 O(𝑛3 + 𝑚 + 𝑘) 에 풀 수 있다.
• 다익스트라 알고리즘을 이용하면 O(𝑘𝑚 𝑙𝑜𝑔𝑛) 에 풀 수 있다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
K. Xor of sums
정답 팀 : 5
가장 처음 푼 팀 : hYEAHyea (고지훈, 강한필, 이종원)
출제자 : kriii (김경근)
해설작성자 : kriii (김경근)
해설자 : kriii (김경근)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
Meet in the middle
𝑛 ≤ 30이라는 조건은 노골적인 힌트가 될 수 있습니다.
𝑛이 O(2 𝑛
)정도에 풀기는 어렵고, O(2 𝑛/2
)정도의 시간에는 해결할 수 있
을 것 같다면 한번쯤 생각해 봐야 합니다.
목표 시간 복잡도는 𝑂 𝑛 ∙ 2 𝑛/2 ∙ 𝑙𝑔 𝑖=1
𝑛
𝑎𝑖 입니다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
𝑁 = 4
입력으로 네 개의 수 𝑎, 𝑏, 𝑐, 𝑑가 주어졌다고 하면 다음의 수를 구해야 합니
다. 편의를 위해 0도 같이 적습니다.
0 ⊕ 𝑎 ⊕ 𝑏 ⊕ 𝑎 + 𝑏 ⊕
𝑐 ⊕ 𝑎 + 𝑐 ⊕ 𝑏 + 𝑐 ⊕ 𝑎 + 𝑏 + 𝑐 ⊕
𝑑 ⊕ 𝑎 + 𝑑 ⊕ 𝑏 + 𝑑 ⊕ 𝑎 + 𝑏 + 𝑑 ⊕
(𝑐 + 𝑑) ⊕ (𝑎 + 𝑐 + 𝑑) ⊕ (𝑏 + 𝑐 + 𝑑) ⊕ (𝑎 + 𝑏 + 𝑐 + 𝑑)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
𝑁 = 4
수들을 두 그룹 [𝑎, 𝑏]와 [𝑐, 𝑑]로 나눈 뒤 항을 생각해 봅니다.
0 ⊕ 𝑎 ⊕ 𝑏 ⊕ 𝑎 + 𝑏 ⊕
𝑐 ⊕ 𝑎 + 𝑐 ⊕ 𝑏 + 𝑐 ⊕ 𝑎 + 𝑏 + 𝑐 ⊕
𝑑 ⊕ 𝑎 + 𝑑 ⊕ 𝑏 + 𝑑 ⊕ 𝑎 + 𝑏 + 𝑑 ⊕
(𝑐 + 𝑑) ⊕ (𝑎 + 𝑐 + 𝑑) ⊕ (𝑏 + 𝑐 + 𝑑) ⊕ (𝑎 + 𝑏 + 𝑐 + 𝑑)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
𝑁 = 4
수들을 두 그룹 [𝑎, 𝑏]와 [𝑐, 𝑑]로 나눈 뒤 항을 생각해 봅니다.
0 + 0 ⊕ 𝑎 + 0 + 0 ⊕ 𝑏 + 0 + 0 ⊕ 𝑎 + 𝑏 + 0 + 0 ⊕
𝑐 + 0 ⊕ 𝑎 + 𝑐 + 0 ⊕ 𝑏 + 𝑐 + 0 ⊕ 𝑎 + 𝑏 + 𝑐 + 0 ⊕
0 + 𝑑 ⊕ 𝑎 + 0 + 𝑑 ⊕ 𝑏 + 0 + 𝑑 ⊕ 𝑎 + 𝑏 + 0 + 𝑑 ⊕
(𝑐 + 𝑑) ⊕ (𝑎 + 𝑐 + 𝑑) ⊕ (𝑏 + 𝑐 + 𝑑) ⊕ (𝑎 + 𝑏 + 𝑐 + 𝑑)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
𝑁 = 4
즉, 첫 번째 그룹으로 다음 식의 값을 빨리 구할 수 있도록 준비하고,
𝑥 ⊕ 𝑎 + 𝑥 ⊕ 𝑏 + 𝑥 ⊕ 𝑎 + 𝑏 + 𝑥
두 번째 그룹으로 만들 수 있는 모든 합을 위에 있는 식에 넣어 값을 모두 구
하면 됩니다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
값 구하기
어떤 수들을 xor한 결과는 각 비트에 대해 독립적으로 작용하므로 𝑥가 특
정할 수일 때 각 비트의 값을 적어봅니다.
2 𝑘비트는 𝑥에 대해 2 𝑘+1의 주기를 가지고 반복됩니다.
𝒙 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
𝑥의 20
비트 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
𝑥의 21
비트 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
𝑥의 22
비트 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
𝑥의 23 비트 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
값 구하기
(𝑥 + 𝑎)의 비트는 𝑥의 비트가 𝑎칸씩 쉬프트 되어 나옵니다.
𝒙 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
𝑥의 22
비트 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
(𝑥 + 1)의 22
비트 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
(𝑥 + 2)의 22
비트 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
(𝑥 + 3)의 22 비트 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
(𝑥 + 4)의 22
비트 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
값 구하기
𝑥 ⊕ 𝑎 + 𝑥 ⊕ 𝑏 + 𝑥 ⊕ 𝑎 + 𝑏 + 𝑥
같은 식에서, 𝑎, 𝑏, 𝑎 + 𝑏를 2 𝑘+1
로 나눈 나머지를 가지고, 어떤 지점에서
비트가 몇 번 바뀌는지를 이분검색을 이용해 찾을 수 있습니다.
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
L. 떨어진 수정
정답 팀 : 53
가장 처음 푼 팀 : Anti-ACG (박범수, 박서홍, 박성관)
출제자 : xhark (김재홍)
해설작성자 : xhark (김재홍)
해설자 : kriii (김경근)
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
답
𝑃
𝑊
제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이
설명
최악의 경우는 𝐾번째 보다 강도가 약한 수정은 모두 강도가 0에 가깝고, 강
한 수정은 모두 강도가 𝑃에 가까운 경우 입니다.
이 때, 𝐾번째 수정을 제외하고는 아무리 수정을 내리쳐도 정보를 뽑아낼
수 없습니다.
그러므로, 𝑊, 2𝑊, 3𝑊, … , 𝑃로 내리치는 것이 최선의 방법입니다.

More Related Content

What's hot

五次方程式はやっぱり解ける #日曜数学会
五次方程式はやっぱり解ける #日曜数学会五次方程式はやっぱり解ける #日曜数学会
五次方程式はやっぱり解ける #日曜数学会Junpei Tsuji
 
강화학습 알고리즘의 흐름도 Part 2
강화학습 알고리즘의 흐름도 Part 2강화학습 알고리즘의 흐름도 Part 2
강화학습 알고리즘의 흐름도 Part 2Dongmin Lee
 
2018 고려대학교 프로그래밍 경시대회 KCPC 간략 풀이
2018 고려대학교 프로그래밍 경시대회 KCPC 간략 풀이2018 고려대학교 프로그래밍 경시대회 KCPC 간략 풀이
2018 고려대학교 프로그래밍 경시대회 KCPC 간략 풀이Subin An
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説AtCoder Inc.
 
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 WinterSuhyun Park
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説AtCoder Inc.
 
双曲平面のモデルと初等幾何
双曲平面のモデルと初等幾何双曲平面のモデルと初等幾何
双曲平面のモデルと初等幾何matsumoring
 
Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説AtCoder Inc.
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Inc.
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Inc.
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Inc.
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木理玖 川崎
 
名のあるフラクタルたち
名のあるフラクタルたち名のあるフラクタルたち
名のあるフラクタルたちYu(u)ki IWABUCHI
 
Indeedなう 予選A 解説
Indeedなう 予選A 解説Indeedなう 予選A 解説
Indeedなう 予選A 解説AtCoder Inc.
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドMasaki Hara
 
AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Inc.
 
アルゴリズムとデータ構造13
アルゴリズムとデータ構造13アルゴリズムとデータ構造13
アルゴリズムとデータ構造13Kenta Hattori
 

What's hot (20)

五次方程式はやっぱり解ける #日曜数学会
五次方程式はやっぱり解ける #日曜数学会五次方程式はやっぱり解ける #日曜数学会
五次方程式はやっぱり解ける #日曜数学会
 
강화학습 알고리즘의 흐름도 Part 2
강화학습 알고리즘의 흐름도 Part 2강화학습 알고리즘의 흐름도 Part 2
강화학습 알고리즘의 흐름도 Part 2
 
2018 고려대학교 프로그래밍 경시대회 KCPC 간략 풀이
2018 고려대학교 프로그래밍 경시대회 KCPC 간략 풀이2018 고려대학교 프로그래밍 경시대회 KCPC 간략 풀이
2018 고려대학교 프로그래밍 경시대회 KCPC 간략 풀이
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
双曲平面のモデルと初等幾何
双曲平面のモデルと初等幾何双曲平面のモデルと初等幾何
双曲平面のモデルと初等幾何
 
Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木
 
WUPC2012
WUPC2012WUPC2012
WUPC2012
 
名のあるフラクタルたち
名のあるフラクタルたち名のあるフラクタルたち
名のあるフラクタルたち
 
Indeedなう 予選A 解説
Indeedなう 予選A 解説Indeedなう 予選A 解説
Indeedなう 予選A 解説
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説
 
アルゴリズムとデータ構造13
アルゴリズムとデータ構造13アルゴリズムとデータ構造13
アルゴリズムとデータ構造13
 

Viewers also liked

2016 FunctionCup 풀이
2016 FunctionCup 풀이2016 FunctionCup 풀이
2016 FunctionCup 풀이geunwoo bae
 
제 5회 전국 대학생 프로그래밍 동아리 연합 여름 대회 해설 슬라이드
제 5회 전국 대학생 프로그래밍 동아리 연합 여름 대회 해설 슬라이드제 5회 전국 대학생 프로그래밍 동아리 연합 여름 대회 해설 슬라이드
제 5회 전국 대학생 프로그래밍 동아리 연합 여름 대회 해설 슬라이드Sun-young Kim
 
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!Startlink
 
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략Startlink
 
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...Startlink
 
두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략
두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략
두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략Startlink
 
두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests
두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests
두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming ContestsStartlink
 
Baekjoon Online Judge 1492번 풀이
Baekjoon Online Judge 1492번 풀이Baekjoon Online Judge 1492번 풀이
Baekjoon Online Judge 1492번 풀이Hongjun Jang
 
COCI 2006/2007 contest #1 solution
COCI 2006/2007 contest #1 solutionCOCI 2006/2007 contest #1 solution
COCI 2006/2007 contest #1 solutionHongjun Jang
 
4. dynamic programming(1)
4. dynamic programming(1)4. dynamic programming(1)
4. dynamic programming(1)Hongjun Jang
 
Google Code Jam 2017 소개
Google Code Jam 2017 소개Google Code Jam 2017 소개
Google Code Jam 2017 소개Startlink
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기Jongwook Choi
 

Viewers also liked (16)

2016 FunctionCup 풀이
2016 FunctionCup 풀이2016 FunctionCup 풀이
2016 FunctionCup 풀이
 
제 5회 전국 대학생 프로그래밍 동아리 연합 여름 대회 해설 슬라이드
제 5회 전국 대학생 프로그래밍 동아리 연합 여름 대회 해설 슬라이드제 5회 전국 대학생 프로그래밍 동아리 연합 여름 대회 해설 슬라이드
제 5회 전국 대학생 프로그래밍 동아리 연합 여름 대회 해설 슬라이드
 
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
 
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
 
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...
 
두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략
두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략
두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략
 
두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests
두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests
두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests
 
Baekjoon Online Judge 1492번 풀이
Baekjoon Online Judge 1492번 풀이Baekjoon Online Judge 1492번 풀이
Baekjoon Online Judge 1492번 풀이
 
G
GG
G
 
H
HH
H
 
M
MM
M
 
E
EE
E
 
COCI 2006/2007 contest #1 solution
COCI 2006/2007 contest #1 solutionCOCI 2006/2007 contest #1 solution
COCI 2006/2007 contest #1 solution
 
4. dynamic programming(1)
4. dynamic programming(1)4. dynamic programming(1)
4. dynamic programming(1)
 
Google Code Jam 2017 소개
Google Code Jam 2017 소개Google Code Jam 2017 소개
Google Code Jam 2017 소개
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 

Similar to 2016 UCPC 풀이

Lecture 2: Supervised Learning
Lecture 2: Supervised LearningLecture 2: Supervised Learning
Lecture 2: Supervised LearningSang Jun Lee
 
Lecture 3: Unsupervised Learning
Lecture 3: Unsupervised LearningLecture 3: Unsupervised Learning
Lecture 3: Unsupervised LearningSang Jun Lee
 
Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Jae-yeol Lee
 
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이NAVER D2
 
한양대 2017 hcpc advanced division 해설
한양대 2017 hcpc advanced division 해설한양대 2017 hcpc advanced division 해설
한양대 2017 hcpc advanced division 해설NAVER D2
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers승혁 조
 
Lecture 4: Neural Networks I
Lecture 4: Neural Networks ILecture 4: Neural Networks I
Lecture 4: Neural Networks ISang Jun Lee
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 
세미나
세미나세미나
세미나Dongyi Kim
 
GAN with Mathematics
GAN with MathematicsGAN with Mathematics
GAN with MathematicsHyeongmin Lee
 
120609 알고리즘 트레이닝 북 작은비숍
120609 알고리즘 트레이닝 북   작은비숍120609 알고리즘 트레이닝 북   작은비숍
120609 알고리즘 트레이닝 북 작은비숍tedypicker
 
머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)홍배 김
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이NAVER D2
 
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 WinterSuhyun Park
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제NAVER D2
 
3.neural networks
3.neural networks3.neural networks
3.neural networksHaesun Park
 
Dsh data sensitive hashing for high dimensional k-nn search
Dsh  data sensitive hashing for high dimensional k-nn searchDsh  data sensitive hashing for high dimensional k-nn search
Dsh data sensitive hashing for high dimensional k-nn searchWooSung Choi
 

Similar to 2016 UCPC 풀이 (20)

Lecture 2: Supervised Learning
Lecture 2: Supervised LearningLecture 2: Supervised Learning
Lecture 2: Supervised Learning
 
Lecture 3: Unsupervised Learning
Lecture 3: Unsupervised LearningLecture 3: Unsupervised Learning
Lecture 3: Unsupervised Learning
 
Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]
 
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
 
한양대 2017 hcpc advanced division 해설
한양대 2017 hcpc advanced division 해설한양대 2017 hcpc advanced division 해설
한양대 2017 hcpc advanced division 해설
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers
 
Lecture 4: Neural Networks I
Lecture 4: Neural Networks ILecture 4: Neural Networks I
Lecture 4: Neural Networks I
 
알고리즘
알고리즘알고리즘
알고리즘
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 
세미나
세미나세미나
세미나
 
Generative adversarial network
Generative adversarial networkGenerative adversarial network
Generative adversarial network
 
GAN with Mathematics
GAN with MathematicsGAN with Mathematics
GAN with Mathematics
 
120609 알고리즘 트레이닝 북 작은비숍
120609 알고리즘 트레이닝 북   작은비숍120609 알고리즘 트레이닝 북   작은비숍
120609 알고리즘 트레이닝 북 작은비숍
 
머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
 
Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)
 
3.neural networks
3.neural networks3.neural networks
3.neural networks
 
Dsh data sensitive hashing for high dimensional k-nn search
Dsh  data sensitive hashing for high dimensional k-nn searchDsh  data sensitive hashing for high dimensional k-nn search
Dsh data sensitive hashing for high dimensional k-nn search
 

2016 UCPC 풀이

  • 1. 2016 UCPC 풀이 ㅇ 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 2016. 08. 20
  • 2. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 A. 배열 정답 팀 : 3 가장 처음 푼 팀 : HanzoGak (김진표, 박상수, 박성민) 출제자 : myungwoo (전명우) 해설작성자 : myungwoo (전명우) 해설자 : myungwoo (전명우)
  • 3. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 배열 • Are you good at using Splay Tree? • Splay Tree • 이진 탐색 트리 • 하지만 특별한 연산 한 개가 있다… • splay(i) • 노드 i를 이진 탐색 트리의 루트로 만든다. • 응용: splay(j, i) • 노드 j를 노드 i의 바로 아래에 붙인다.
  • 4. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 1) Zig step
  • 5. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 2) Zig-zig Step
  • 6. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 3) Zig-zag Step
  • 7. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 배열 • 이제 splay를 적절히 이용해서 flip, shift를 구현하면 된다! • Subarray의 shift는 flip 3번으로 구현이 가능하다.
  • 8. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 배열 • Flip은 어떻게 구현할까? • Flip(l, r)이 이루어진다고 하자 • splay(l-1), splay(r+1, l-1) • [l, r]에 해당하는 부분 이진탐색 트리를 만들고, lazy propagation으로 구현 r+1 l-1 [l, r]
  • 9. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 배열 • 3번은 이진탐색트리에서 i번째 수를 구하는 연산 • 4번은 각 수에 해당하는 노드 포인터를 미리 배열로 가지고, 해당 노드를 splay , 그러면 왼쪽 서브트리 크기+1이 답.
  • 10. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 배열 • Splay 트리의 시간복잡도는? • 앞서 설명한 방식으로 splay를 구현하면 모든 연산이 amortized O(lg n)라는 것이 증명됨 • 다만 splay를 자주해줘야함 • 예를 들어, 이진탐색트리에서 search한 이후 search로 나온 노드를 splay • 예를 뜰어, 이진탐색트리에서 insert한 이후 insert한 노드를 splay • 최소, 최대, 합의 구현은? • 각 노드별로 노드를 루트로 했을 때 서브트리의 최소, 최대, 합을 저장 • Zig, zig-zig, zig-zag 과정에서 관련 자료를 실수없이 계산
  • 11. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 B. 최대 클리크 구하기 정답 팀 : 45 가장 처음 푼 팀 : Anti-ACG (박범수, 박서홍, 박성관) 출제자 : myungwoo (전명우) 해설작성자 : kriii (김경근) 해설자 : kriii (김경근)
  • 12. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 구간 그래프 두 정점 𝑖, 𝑗사이에 간선이 있으려면, [𝑆𝑖, 𝐸𝑖]와 [𝑆𝑗, 𝐸𝑗]사이에 공통된 부분 이 있어야 합니다. 즉, 𝑆𝑖 ≤ 𝑥 ≤ 𝐸𝑖와 𝑆𝑗 ≤ 𝑥 ≤ 𝐸𝑗를 동시에 만족하는 𝑥가 있으면 됩니다. 조금 간단하게 적으면 max 𝑆𝑖, 𝑆𝑗 ≤ 𝑥 ≤ min(𝐸𝑖, 𝐸𝑗)를 만족하는 𝑥가 존 재하면 됩니다.
  • 13. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 구간 그래프의 클리크 𝑛개의 정점 𝑖1, … , 𝑖 𝑛사이의 모든 두 정점간에 간선이 있으려면, 아까 전의 식을 모두 연립해 볼 때, max 𝑆𝑖1 , … , 𝑆𝑖 𝑛 ≤ 𝑥 ≤ min 𝐸𝑖1 , … , 𝐸𝑖 𝑛 를 만족하는 𝑥가 존재하면 됩니다.
  • 14. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 구간 그래프의 클리크 이제 역으로 어떤 𝑥를 정했을 때, 𝑆𝑖 ≤ 𝑥 ≤ 𝐸𝑖를 만족하는 모든 𝑖를 찾으면 그것이 클리크를 이룬다는 것을 알 수 있습니다. 주어진 구간의 좌표를 압축하고 𝑥가 증가하는 순서로 스위핑을 하여 최대 한 많은 구간을 통과하는 𝑥를 찾아 𝑂(𝑁𝑙𝑔𝑁)에 문제를 해결할 수 있습니 다.
  • 15. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 C. 분단의 슬픔 정답 팀 : 2 가장 처음 푼 팀 : ACG (최석환, 윤지학, 조승현) 출제자 : myungwoo (전명우) 해설작성자 : myungwoo (전명우) 해설자 : myungwoo (전명우)
  • 16. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 분단의 슬픔 A진영에 무조건 들어가야하는 사람들 B진영에 무조건 들어가야하는 사람들 진영에 상관없는 사람들
  • 17. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 분단의 슬픔 • 위와 같이 그래프를 만들고 max-flow를 구하면 된다 • Max-flow = min-cut • 위 그래프에서 cut하나는 필연적으로 하나의 분단 구성을 의미하고, 그 때 cut 비용이 슬픔 정도의 합이기 때문!
  • 18. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 분단의 슬픔 • 여기서, 2가지를 더 신경써줘야한다 1. Running time: Ford-Fulkerson TLE, Dinic 0.48초, Optimal 0.02초 2. (일부러 함정을 판 건 아닌데…) newline... • 출력 형식에 3개의 줄을 출력하고, 진영에 속한 사람이 없으면 빈 줄을 출력하라고 명시 • ”1n2n”은 두 개의 줄로 판단… (POSIX 정의에서 한 줄의 끝은 newline…) • 이걸로 고생한 팀이 있어서 죄송할 따름입니다…
  • 19. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 D. Flowey’s Love 정답 팀 : 2 가장 처음 푼 팀 : ACG (최석환, 윤지학, 조승현) 출제자 : functionx (배근우) 해설작성자 : functionx (배근우) 해설자 : functionx (배근우)
  • 20. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 최적해로 가능한 그림 • 당신과 친절 알갱이의 속력이 1이므로 항상 개선된 경로를 만들 수 있다.
  • 21. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 TSP 문제로 변형 가능 • 방문하는 점의 순서를 지정 • 각 점을 최대한 빨리 방문한다. • 답을 Brute-Force로 구하면 O(𝑛!) 이므로 시간초과가 난다.
  • 22. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 비트 DP 식 정의 • DP[1100100][4] : 0, 1, 4번 점을 방문하며, 마지막으로 4번 점을 방 문할 때 걸리는 최소 시간 (불가능하면 -1으로 처리) • DP[bit][a]에서 DP[bit+2b][b]로 뿌려주는 방식으로 답을 계산 • DP[bit][a]초 후 상태에서 a번 점에서 b번 점으로 가는 시간 계산 • 시간복잡도는 O(𝑛2 ∙ 2 𝑛 ) 이다.
  • 23. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 점들 간의 도달시간 계산 • 점 A와 반직선 BB’가 있으면 반직선 위에 AC=BC 인 점 C를 잡아야 함 • BC의 길이를 x로 놓고 벡터 방정식을 세워서 풀면 x를 구할 수 있음 • 만약 답이 되는 지점이 직사각형 영역 밖에 있으면 점이 직사각형 안으로 들어올 때까지 기다려야 함
  • 24. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 E. 닉네임에 갓 붙이기 정답 팀 : 69 가장 처음 푼 팀 : Never give up (이승재, 이창수, 장홍준) 출제자 : functionx (배근우) 해설작성자 : functionx (배근우) 해설자 : functionx (배근우)
  • 25. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 E. 닉네임에 갓 붙이기 • gets, fgets, getline 등을 이용하여 줄 단위로 입력합니다. • strlen 함수를 이용하여 문자열의 길이를 구한 후, for문과 if문을 이용해 서 첫 공백을 찾습니다. • 우선 god을 출력해준 다음, 첫 공백 이후의 문자들을 출력해줍니다. 다 만, 공백은 출력하지 말아야 합니다.
  • 26. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 F. 행복 유치원 정답 팀 : 62 가장 처음 푼 팀 : ACG (최석환, 윤지학, 조승현) 출제자 : myungwoo (전명우) 해설작성자 : kriii (김경근) 해설자 : kriii (김경근)
  • 27. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 F. 행복 유치원 처음 모든 학생이 한 조에 들어가면 키 차이는 𝑥 𝑁 − 𝑥1입니다. [𝑥1, … , 𝑥𝑖, 𝑥𝑖+1, … , 𝑥 𝑁]
  • 28. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 F. 행복 유치원 𝑥𝑖, 𝑥𝑖+1를 기준으로 조를 나누면 키 차이가 𝑥𝑖+1 − 𝑥𝑖줄어듭니다. 𝑥1, … , 𝑥𝑖 [𝑥𝑖+1, … , 𝑥 𝑁]
  • 29. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 F. 행복 유치원 즉, 조를 하나 늘리려면 𝑥𝑖+1 − 𝑥𝑖중 하나를 선택해 줄이면 됩니다. 그러므로 𝑥𝑖+1 − 𝑥𝑖를 내림차순으로 정렬하여 앞의 𝐾 − 1개를 선택 하여 𝑥 𝑁 − 𝑥1에서 빼면 됩니다.
  • 30. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 G. 이것도 해결해 보시지 정답 팀 : 3 가장 처음 푼 팀 : hYEAHyea (고지훈, 강한필, 이종원) 출제자 : xhark (김재홍) 해설작성자 : xhark (김재홍) 해설자 : kriii (김경근)
  • 31. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 Check about 𝐴𝐵 = 𝐶 모두 𝑁 × 𝑁행렬이기 때문에, 𝑂(𝑁3)의 시간이 걸려야 체크할 수 있습니다. 빠 른 행렬 곱셈 방법이 있기는 하지만, 이런 식으로는 아무리 빨라도 𝑂(𝑁2)은 불 가능합니다.
  • 32. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 Freivalds’ algorithm 𝐴𝐵𝑣 = 𝐶𝑣 𝑣가 𝑁 × 1행렬이라고 할 때 𝐴(𝐵𝑣)순서로 계산하면 𝑂(𝑁2)의 시간에 위의 식이 참인지 체크 가능하며, 𝑣가 0과 1로 이루어진 행렬이라고 하더라도 ½이상의 성공 확률을 보장합니다.
  • 33. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 출제자의 변 𝑣의 원소로 가능한 범위가 더 커지면 확률이 어떻게 변할까? 𝐴𝐵𝑥 = 𝐶𝑥의 근은 어떤 형태일까? 별해는 FFT
  • 34. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 H. 범죄 파티 정답 팀 : 23 가장 처음 푼 팀 : Anti-ACG (박범수, 박서홍, 박성관) 출제자 : Acka (김현정) 해설작성자 : Acka (김현정) 해설자 : Acka (김현정)
  • 35. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 2-SAT 접근 • i의 입장에서: (iA || iB) • i, j에게 변호를 요청받은 A에 대해서: (!iA || !jA) • !iA => iB, !iB => iA, iA => !jA, jA => iA • 모든 (x1 || y1) 절을 만족하는 문제.
  • 36. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 2-SAT 접근 • 파티 비용을 정하고 => Parametric Search • 모든 조건들을 만족할 수 있는지를 조사한다. • 각 친구들에게 용의자 친구는 두명까지만 존재하므로 한 번의 2-sat에 소요되는 시간은 O(E) => O(N) • 시간복잡도 O(NlogN)
  • 37. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 이분매칭 접근 • 용의자 i에 대해서: i -> Ai, i - >Bi • 전체 N명의 용의자에 대해 최대 매칭이 N이면 가능하다. • 역시 파티 비용을 먼저 잡고 => Parametric Search • Hopcroft-Karp: worst Nsqrt(N) 짱짱 이분매칭 알고리즘 • 사실 이런 거 필요없고, 용의자와 친구 간의 관계가 최대 2:2를 보장하므로 그리디도 가능합니다^^..
  • 38. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 I. 포스터 정답 팀 : 2 가장 처음 푼 팀 : ACG (최석환, 윤지학, 조승현) 출제자 : myungwoo (전명우) 해설작성자 : functionx (배근우) 해설자 : functionx (배근우)
  • 39. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 2D에서의 접근 • Plane-Sweeping을 이용하여 각 y-축에 대해 포스터가 보이는 길이를 구한 후, y-좌표의 차이를 곱하여 더함. • 따라서 우리는 1D에서의 포스터 문제를 풀면 됨.
  • 40. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 1D에서의 접근 • 좌표 정렬은 이미 한 상태라고 생각. • Segment Tree 등을 이용하여 1번 포스터부터 덮으면 O 𝑁2 𝑙𝑜𝑔𝑁 으 로 TLE가 날 수도 있음. • Union-Find를 이용하여 N번 포스터부터 덮는 방법을 사용한다. 이 경 우 시간복잡도는 O 𝑁2 𝛼(𝑁) 이다.
  • 41. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 Union-Find 알고리즘 • 맨 처음에 next[i]를 i+1로 초기화 index 1 2 3 4 5 6 7 8 9 next 2 3 4 5 6 7 8 9 10 post - - - - - - - - - • S~E 범위를 포스터로 채우면 됨 index 1 2 3 4 5 6 7 8 9 next 2 3 5 5 6 7 8 9 10 post - - N N - - - - -
  • 42. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 Union-Find 알고리즘 • S, next[S], next[next[S]], …를 채우므로 이미 채워진 곳은 안 채워짐 index 1 2 3 4 5 6 7 8 9 next 2 6 6 6 6 7 8 9 10 post - N-1 N N N-1 - - - - • next 배열의 값을 일일이 바꾸면 O 𝑛2 이다. 하지만 Union-Find 알 고리즘을 이용하여 이를 O 𝑛 으로 줄일 수 있다. • Cover(3, 4, N)에서는 union(3, 4)를 한다. 이때 next의 값은 3이 있는 컴포넌트의 루트 노드에서만 바꾸면 된다. • 비슷하게, Cover(2, 5, N-1)은 union(2, 3), union(3, 5)를 한다.
  • 43. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 J. 내일로 여행 정답 팀 : 50 가장 처음 푼 팀 : bubble_bath_with_ntopia (김인섭, 박성원, 한수 환) 출제자 : functionx (배근우) 해설작성자 : functionx (배근우) 해설자 : functionx (배근우)
  • 44. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 J. 내일로 여행 • 내일로 티켓을 샀을 때의 그래프와 사지 않았을 때의 그래프 두 개에 대해 서 처리한다. • M-1개의 경로에 대해서 최단경로를 구한다. • 플로이드-워셜 알고리즘을 이용하면 O(𝑛3 + 𝑚 + 𝑘) 에 풀 수 있다. • 다익스트라 알고리즘을 이용하면 O(𝑘𝑚 𝑙𝑜𝑔𝑛) 에 풀 수 있다.
  • 45. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 K. Xor of sums 정답 팀 : 5 가장 처음 푼 팀 : hYEAHyea (고지훈, 강한필, 이종원) 출제자 : kriii (김경근) 해설작성자 : kriii (김경근) 해설자 : kriii (김경근)
  • 46. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 Meet in the middle 𝑛 ≤ 30이라는 조건은 노골적인 힌트가 될 수 있습니다. 𝑛이 O(2 𝑛 )정도에 풀기는 어렵고, O(2 𝑛/2 )정도의 시간에는 해결할 수 있 을 것 같다면 한번쯤 생각해 봐야 합니다. 목표 시간 복잡도는 𝑂 𝑛 ∙ 2 𝑛/2 ∙ 𝑙𝑔 𝑖=1 𝑛 𝑎𝑖 입니다.
  • 47. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 𝑁 = 4 입력으로 네 개의 수 𝑎, 𝑏, 𝑐, 𝑑가 주어졌다고 하면 다음의 수를 구해야 합니 다. 편의를 위해 0도 같이 적습니다. 0 ⊕ 𝑎 ⊕ 𝑏 ⊕ 𝑎 + 𝑏 ⊕ 𝑐 ⊕ 𝑎 + 𝑐 ⊕ 𝑏 + 𝑐 ⊕ 𝑎 + 𝑏 + 𝑐 ⊕ 𝑑 ⊕ 𝑎 + 𝑑 ⊕ 𝑏 + 𝑑 ⊕ 𝑎 + 𝑏 + 𝑑 ⊕ (𝑐 + 𝑑) ⊕ (𝑎 + 𝑐 + 𝑑) ⊕ (𝑏 + 𝑐 + 𝑑) ⊕ (𝑎 + 𝑏 + 𝑐 + 𝑑)
  • 48. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 𝑁 = 4 수들을 두 그룹 [𝑎, 𝑏]와 [𝑐, 𝑑]로 나눈 뒤 항을 생각해 봅니다. 0 ⊕ 𝑎 ⊕ 𝑏 ⊕ 𝑎 + 𝑏 ⊕ 𝑐 ⊕ 𝑎 + 𝑐 ⊕ 𝑏 + 𝑐 ⊕ 𝑎 + 𝑏 + 𝑐 ⊕ 𝑑 ⊕ 𝑎 + 𝑑 ⊕ 𝑏 + 𝑑 ⊕ 𝑎 + 𝑏 + 𝑑 ⊕ (𝑐 + 𝑑) ⊕ (𝑎 + 𝑐 + 𝑑) ⊕ (𝑏 + 𝑐 + 𝑑) ⊕ (𝑎 + 𝑏 + 𝑐 + 𝑑)
  • 49. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 𝑁 = 4 수들을 두 그룹 [𝑎, 𝑏]와 [𝑐, 𝑑]로 나눈 뒤 항을 생각해 봅니다. 0 + 0 ⊕ 𝑎 + 0 + 0 ⊕ 𝑏 + 0 + 0 ⊕ 𝑎 + 𝑏 + 0 + 0 ⊕ 𝑐 + 0 ⊕ 𝑎 + 𝑐 + 0 ⊕ 𝑏 + 𝑐 + 0 ⊕ 𝑎 + 𝑏 + 𝑐 + 0 ⊕ 0 + 𝑑 ⊕ 𝑎 + 0 + 𝑑 ⊕ 𝑏 + 0 + 𝑑 ⊕ 𝑎 + 𝑏 + 0 + 𝑑 ⊕ (𝑐 + 𝑑) ⊕ (𝑎 + 𝑐 + 𝑑) ⊕ (𝑏 + 𝑐 + 𝑑) ⊕ (𝑎 + 𝑏 + 𝑐 + 𝑑)
  • 50. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 𝑁 = 4 즉, 첫 번째 그룹으로 다음 식의 값을 빨리 구할 수 있도록 준비하고, 𝑥 ⊕ 𝑎 + 𝑥 ⊕ 𝑏 + 𝑥 ⊕ 𝑎 + 𝑏 + 𝑥 두 번째 그룹으로 만들 수 있는 모든 합을 위에 있는 식에 넣어 값을 모두 구 하면 됩니다.
  • 51. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 값 구하기 어떤 수들을 xor한 결과는 각 비트에 대해 독립적으로 작용하므로 𝑥가 특 정할 수일 때 각 비트의 값을 적어봅니다. 2 𝑘비트는 𝑥에 대해 2 𝑘+1의 주기를 가지고 반복됩니다. 𝒙 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 𝑥의 20 비트 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 𝑥의 21 비트 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 𝑥의 22 비트 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 𝑥의 23 비트 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
  • 52. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 값 구하기 (𝑥 + 𝑎)의 비트는 𝑥의 비트가 𝑎칸씩 쉬프트 되어 나옵니다. 𝒙 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 𝑥의 22 비트 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 (𝑥 + 1)의 22 비트 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 (𝑥 + 2)의 22 비트 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 (𝑥 + 3)의 22 비트 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 (𝑥 + 4)의 22 비트 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
  • 53. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 값 구하기 𝑥 ⊕ 𝑎 + 𝑥 ⊕ 𝑏 + 𝑥 ⊕ 𝑎 + 𝑏 + 𝑥 같은 식에서, 𝑎, 𝑏, 𝑎 + 𝑏를 2 𝑘+1 로 나눈 나머지를 가지고, 어떤 지점에서 비트가 몇 번 바뀌는지를 이분검색을 이용해 찾을 수 있습니다.
  • 54. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 L. 떨어진 수정 정답 팀 : 53 가장 처음 푼 팀 : Anti-ACG (박범수, 박서홍, 박성관) 출제자 : xhark (김재홍) 해설작성자 : xhark (김재홍) 해설자 : kriii (김경근)
  • 55. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 답 𝑃 𝑊
  • 56. 제6회 전국 대학생 프로그래밍 대회 동아리 연합 여름 대회 풀이 설명 최악의 경우는 𝐾번째 보다 강도가 약한 수정은 모두 강도가 0에 가깝고, 강 한 수정은 모두 강도가 𝑃에 가까운 경우 입니다. 이 때, 𝐾번째 수정을 제외하고는 아무리 수정을 내리쳐도 정보를 뽑아낼 수 없습니다. 그러므로, 𝑊, 2𝑊, 3𝑊, … , 𝑃로 내리치는 것이 최선의 방법입니다.