한양대 2017 hcpc advanced division 해설

27
Advanced Division 제4회 한양대학교 프로그래밍 경시대회 문제 해설 및 풀이

Upload: naver-d2

Post on 23-Jan-2018

819 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: 한양대 2017 hcpc advanced division 해설

Advanced Division

제4회한양대학교프로그래밍경시대회

문제해설및풀이

Page 2: 한양대 2017 hcpc advanced division 해설

E. 슈퍼울트라그레이트타코야끼

출제자: 권기택최초정답팀: Allsolve

제4회한양대학교프로그래밍경시대회

Page 3: 한양대 2017 hcpc advanced division 해설

E. 슈퍼울트라그레이트타코야끼

제4회한양대학교프로그래밍경시대회

fgets, getline등의함수들을사용해서공백을포함한문자열을입력받는다.

6과 9는서로치환가능하므로 (cnt[6]+cnt[9]+1)/2와나머지빈도수중최대값을출력하면된다.

Page 4: 한양대 2017 hcpc advanced division 해설

BEG-C./ADV-A. 커피

출제자: 윤승원최초정답팀: TEPS

제4회한양대학교프로그래밍경시대회

Page 5: 한양대 2017 hcpc advanced division 해설

BEG-C./ADV-A. 커피

제4회한양대학교프로그래밍경시대회

dp[i][j]: 현재가진쿠폰의개수가 j개일때,[i, N]번째날에서커피를사는최소비용이라고정의

C[i]: i번째날에커피를사는데드는비용

i1 N

Page 6: 한양대 2017 hcpc advanced division 해설

BEG-C./ADV-A. 커피

제4회한양대학교프로그래밍경시대회

1) 쿠폰을사용하지않는경우dp[i][j] = min(dp[i][j], dp[i+1][j+1]+C[i]);

2) 쿠폰 5장을사용하는경우dp[i][j] = min(dp[i][j], dp[i+1][j-5]+C[i]-3000);

3) 쿠폰 10장을사용하는경우dp[i][j] = min(dp[i][j], dp[i+1][j-10]+max(0, C[i]-10000));

4) 쿠폰 15장을사용하는경우dp[i][j] = min(dp[i][j], dp[i+1][j-15]);

Page 7: 한양대 2017 hcpc advanced division 해설

BEG-G./ADV-D. H-virus

출제자: 서상우최초정답팀: SMaster

제4회한양대학교프로그래밍경시대회

Page 8: 한양대 2017 hcpc advanced division 해설

BEG-G./ADV-D. H-virus

제4회한양대학교프로그래밍경시대회

BFS를이용해모든일반인이감염될때까지걸리는시간을구한다.

모든보균자들을 queue에넣어놓고 BFS로격자판을탐색한다.

Page 9: 한양대 2017 hcpc advanced division 해설

K. I-LAND

출제자: 이현지최초정답팀: youngjincarry

제4회한양대학교프로그래밍경시대회

Page 10: 한양대 2017 hcpc advanced division 해설

K. I-LAND

제4회한양대학교프로그래밍경시대회

최소비용스패닝트리(MCST)를생성한다.

여기에 (N-E)개의공항을건설해야하므로(현재까지MCST를구성하는데든비용) + (N-E)×X의최소값을찾는다.

Page 11: 한양대 2017 hcpc advanced division 해설

BEG-I./ADV-F. 꿍프로젝트

출제자: 남궁석최초정답팀: Delete_AesongE

제4회한양대학교프로그래밍경시대회

Page 12: 한양대 2017 hcpc advanced division 해설

BEG-I./ADV-F. 꿍프로젝트

제4회한양대학교프로그래밍경시대회

우리가구하고자하는정답을 A(n)이라하고편의상 1~n번의학생들이있다고하자.

그렇다면 A(n)은 (n번학생을포함한그룹이 2명인경우)+(n번학생을포함한그룹이 3명이상인경우)로나타낼수있다.

Page 13: 한양대 2017 hcpc advanced division 해설

BEG-I./ADV-F. 꿍프로젝트

제4회한양대학교프로그래밍경시대회

1) n번학생을포함한그룹이 2명인경우

1~(n-1)번학생중한명과 2명인그룹이되고나머지 (n-2)명의학생들이일정그룹을구성하는경우다. 1~(n-1)번학생중한명과2명인그룹이되는경우의수는 (n-1) 이고 (n-2)명의학생들이일정그룹을구성하는경우는 A(n-2)이다.따라서이때의경우의수는 (n-1) * A(n-2)로나타낼수있다.

Page 14: 한양대 2017 hcpc advanced division 해설

BEG-I./ADV-F. 꿍프로젝트

제4회한양대학교프로그래밍경시대회

2) n번학생을포함한그룹이 3명이상인경우

1~(n-1)번학생들이일정그룹을구성했을때 n번학생이이그룹들중하나를선택하여들어가기만하면 n번학생을포함한그룹은 3명이상이된다. n번학생이포함될그룹이기존에 k명이었다고하면이그룹에들어갈경우경우의수는 k * A(n-2)가되는데, 모든그룹의학생수를합하면 (n-1)명이되므로가능한 k의합이 (n-1)이다.따라서이때의경우의수는 (n-1) * A(n-1)로나타낼수있다.

Page 15: 한양대 2017 hcpc advanced division 해설

BEG-I./ADV-F. 꿍프로젝트

제4회한양대학교프로그래밍경시대회

그러므로A(n)= (n-1) * A(n-2) + (n-1) * A(n-1)= (n-1) * ( A(n-2) + A(n-1) ) 이성립한다.

Page 16: 한양대 2017 hcpc advanced division 해설

BEG-K./ADV-J. 크리스마스엔카드놀이지!

출제자: 이준엽최초정답팀: HeadShot

제4회한양대학교프로그래밍경시대회

Page 17: 한양대 2017 hcpc advanced division 해설

BEG-K./ADV-J. 크리스마스엔카드놀이지!

제4회한양대학교프로그래밍경시대회

만들수있는모든 a, b에대해서 a×b를구한다.

각각의경우에, p는 (a와 b를구성하는데쓴숫자들중에서가장큰수) + 1로결정할때 a×b의길이가가장길어진다.

Page 18: 한양대 2017 hcpc advanced division 해설

BEG-E./ADV-B. 신경교란물질

출제자: 김종현최초정답팀:

제4회한양대학교프로그래밍경시대회

Page 19: 한양대 2017 hcpc advanced division 해설

BEG-E./ADV-B. 신경교란물질

제4회한양대학교프로그래밍경시대회

중추세포를루트로하는트리를그린다.

1. 출발점이있는부트리쪽에보조세포가모두있어야한다. 그렇지않으면출발->도착사이에보조세포를경유할수없어불가능.

2. 출발점을향해내려가며출발점이있지않은다른부트리쪽에보조세포가있다면파괴하고온다.이때되돌아오는것을꼭고려.

7

2

1 63

4 5 8

출발 보조보조

보조

중추

Page 20: 한양대 2017 hcpc advanced division 해설

BEG-E./ADV-B. 신경교란물질

제4회한양대학교프로그래밍경시대회

3. 출발점에다다랐을때부트리에남은보조세포가있으면해당보조세포를역시파괴하고돌아온후진행을종료한다.

4. 이과정전체를뒤집으면원래의출발 ->도착경로가된다.

시간복잡도 : O(n)

출제의도 : n=1만, m이 100이하인것으로주어서다익스트라등의최단거리를떠올리도록함정을유도하지만실제로는트리상의최단거리문제

7

2

1 63

4 5 8

출발 보조보조

보조

중추

Page 21: 한양대 2017 hcpc advanced division 해설

H. 기택이의선물주기

제4회한양대학교프로그래밍경시대회

출제자: 김정무최초정답팀: Coding0aihani

Page 22: 한양대 2017 hcpc advanced division 해설

H. 기택이의선물주기

제4회한양대학교프로그래밍경시대회

기택이에게고마워하는정도를 k로잡았을때각각의친구들에대해서주어진예산으로 k이상의행복을얻을수있는지계산한다.

k이상의행복을줄수있는선물들중에서가장작은비용을알아내서전부더한후그값이예산을초과하는지본다.

되는지안되는지를판별한후 k를다시이분탐색하여찾아낸다.

Page 23: 한양대 2017 hcpc advanced division 해설

G. 직소스도쿠

제4회한양대학교프로그래밍경시대회

출제자: 남궁석최초정답팀: Wajangchang

Page 24: 한양대 2017 hcpc advanced division 해설

G. 직소스도쿠

제4회한양대학교프로그래밍경시대회

백트래킹을통해모든경우의수를구한다.

Page 25: 한양대 2017 hcpc advanced division 해설

I. 수현이의일격필살

제4회한양대학교프로그래밍경시대회

출제자: 김지훈최초정답팀: X

Page 26: 한양대 2017 hcpc advanced division 해설

I. 수현이의일격필살

제4회한양대학교프로그래밍경시대회

dp[i][j]를다음과같이정의한다.

현재까지각줄마다마지막으로부순서버컴퓨터가각각첫째줄의 i번째서버와둘째줄의 j번째서버일때,그때까지가장많이사용한일격필살의횟수

Page 27: 한양대 2017 hcpc advanced division 해설

I. 수현이의일격필살

제4회한양대학교프로그래밍경시대회

그러면점화식은다음과같다.

first = max(dp[k][j]+1)

(단, max(A[k], B[j]) < A[i])

second = max(dp[i][k]+1)

(단, max(A[i], B[k]) < B[j])

dp[i][j] = max(first, second)

1<=k<i

1<=k<j

=> 첫째줄의 k번째, 둘째줄의 j번째서버까지파괴된상태에서첫째줄의i번째서버를파괴한다.

=> 첫째줄의 i번째, 둘째줄의 k번째서버까지파괴된상태에서둘째줄의j번째서버를파괴한다.