13
2016 본선문제 풀이

SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

Embed Size (px)

Citation preview

Page 1: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

2016본선문제풀이

Page 2: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

A. 끝말잇기

•입력은조작된사전이들어온다.

• 그러므로, 입력의 모든 영단어는 구성 알파벳이 정렬되어 있다.

• 또한, 모든 조작된 단어가 사전순으로 정렬되어 들어온다.

• 즉, 모든 단어가 차례대로 word[i-1].last == word[i].first를 만족하면 YES,

한 번이라도 만족하지 못하면 NO.

출제자: 김동이

Page 3: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

F. DNA 비밀번호

• 가장 쉬운 풀이는 가능한 모든 경우를 전부 해보는 것

• 시간복잡도 O(PS)

• 시간초과!

• 현재 보고 있는 문자열 PiPi+1…Pi+s-1의 [‘A’, ‘C’, ‘G’, ‘T’]의 개수

• 다음 보게 되는 문자열 Pi+1Pi+2…Pi+s의 [‘A’, ‘C’, ‘G’, ‘T’]의 개수

• 두 문자열의 구성은 Pi, Pi+S 외에 모두 겹친다.

• 배열을 사용하여 시간을 줄인다. cnt[4]에 카운팅한다.

출제자: 천민호

Page 4: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

C. Candy

• 문제 요약

• 𝑘=0𝑛 2𝑘 ×𝑛𝐶𝑘

• = 𝑘=0𝑛 1𝑛−𝑘2𝑘 ×𝑛𝐶𝑘

• = (1 + 2)n = 3n

• 𝑘=1𝑛 2𝑘 ×𝑛𝐶𝑘 = 3𝑛 − 1

출제자: 장홍준

Page 5: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

H. 사서왕 준서

• 필요한 최소의 노동력• 모든 책을 옮기는 노동력(sumf) – 쓰지 않아도 되는 최대의 노동력(maxf)• 옮기지 않아도 되는 비내림차순 책들의 노동력을 조사한다.

• D[i]: i번째 책을 마지막으로 하는 비내림차순 책들의 노동력합의 최대값

• D[i] = max(D[j]) + f[i] //j = 0 ~ i-1

• 답: sumf – maxf

• 시간복잡도: O(N2)

출제자: 김현정

Page 6: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

D. InterGrid

• Vertex: 출발점, 웜홀, 도착점

• Edge: 시작점->웜홀 / 웜홀 <-> 웜홀 / 웜홀->도착점모든 Edge는 manhatan dist의 가중치를 가진다.

출제자: 송기선

S E

1

3

2

4

Page 7: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

D. InterGrid

• 출발점 -> 도착점

• Dijkstra Algorithm

• 시간복잡도 O(V2)

출제자: 송기선

Page 8: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

E. Three-Tree

• S는 N2비례하는 크기 => 이런 모양의 트리를 구성할 수 있다.

• 이 때 생기는 단순 경로의 개수 S = B * (A + B – 1)

• B, (A + B – 1)을 S의 약수 쌍으로 정하면 되겠구나!

• 그런데 S가 소수라면.. ? B = 1, A = S?

출제자: 전명우

S

B개

A개

Page 9: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

E. Three-Tree

• C개의 노드를 추가해보자!

• 늘어나는 단순 경로의 개수는 정확히 C개

• 길이 3인 단순 경로 개수 S = B * (A + B – 1) + C

• 이제 S가 소수여도 C를 적절히 잘 정하자

• C 후보 개수 약 S개, B 후보 개수 약 S0.5개

• 시간복잡도 O(S1.5)

출제자: 전명우

S

B개

A개

C개

Page 10: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

G. I.O.I

• 1~N번째 선수 => 0~N-1번 선수라고 하자.

• D1 [i][j] / D2 [i][j]

• i: 한국팀의 남은 선수들의 bitmask 표현

• j: 상대팀의 남은 선수들의 bitmask 표현

• Bitmask 표현

출제자: 조승현

101011100번째 선수가남아 있다

1번째 선수가없다

= 1 + 4 + 16 + 32 + 64 = 117

Page 11: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

G. I.O.I

• D1 [i][j]: 한국팀이 선택할 차례일 때 한국이 승리하는 횟수의 기대값

• D2 [i][j]: 상대팀이 선택할 차례일 때 한국이 승리하는 횟수의 기대값

• D1 [i][j] = max(D2 [i – (1 << k)][j – (1 << l)] + pk,l)

• D2 [i][j] = min(D1 [i – (1<< k)][j – (1 << l)]+ pk,l)

• 답: D1[2n-1][2n-1], D2 [2n-1][2n-1]

출제자: 조승현

Page 12: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

B. 진격의 거인

• 먼저, 삼각함수를 사용해 파괴된 영역 내부의 집들을 찾아낸 후 제외

• 두 집 사이의 거리

1. 두 집을 잇는 선분이 거인이 파괴한 영역을 지나지 않는 경우2. 두 집을 잇는 선분이 거인이 파괴한 영역을 지나는 경우

출제자: 조승현

B

A

경우 1

B

A

경우 2

Page 13: SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선 문제풀이

B. 진격의 거인

• 𝐴𝐵가 𝑂𝑃혹은 𝑂𝑄와 교차하는 경우

• 𝑐𝑐𝑤 𝑂, 𝑃, 𝐴 × 𝑐𝑐𝑤 𝑂, 𝑃, 𝐵 < 0 &&

𝑐𝑐𝑤 𝑂,𝑄, 𝐴 × 𝑐𝑐𝑤 𝑂,𝑄, 𝐵 < 0

출제자: 조승현

B

A

O

P

Q

• 두 집을 잇는 선분이 파괴된 영역을 지나는 경우?