Vu	
  Pham
Coder’s	
  High	
  2014
해법 설명 프레젠테이션
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
August	
  30,	
  2014
Vu	
  Pham
문제 : https://www.acmicpc.net/problem/10211
제출 수 :	
  	
  125
정답 수 :	
  	
  56	
  	
  (44.8%)
첫 정답자 :	
  RiKang @고려대 (RiKang,	
  이승재)
(2m	
  42s)
출제 :	
  	
  myungwoo (전명우)	
  
분류 : Greedy	
  +	
  Implementation
PA.	
  MaximumSubarray
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
for (int i=1;i<=N;i++){
s  +=  X[i];
if (m  <  s)  m  =  s;
if  (s  <  0)  s  =  0;
}
PA.	
  MaximumSubarray
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
문제 : https://www.acmicpc.net/problem/10212
제출 수 :	
  	
  773
정답 수 :	
  	
  38	
  	
  (4.9%)
첫 정답자 :	
  0YES	
  @한양대 (hj_929,	
  이현지)	
  
(44m	
  34s)
출제 :	
  	
  kriii (김경근)	
  
분류 : Ad-­‐hoc
PB.	
  Mystery
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
여러가지방법이 있는데,
1)	
  	
  srand(&a);	
  후 랜덤 쓰기
2)	
  	
  puts(((int)(&a)>>20)%2?”Yonsei”:”Korea”);
3)	
  	
  fopen이 사용가능하므로 적절히 쓰기
등등…
PB.	
  Mystery
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
문제 : https://www.acmicpc.net/problem/10213
제출 수 :	
  	
  104
정답 수 :	
  	
  8	
  	
  (7.692%)
첫 정답자 :	
  cki86201	
  @서울과고(cki86201,	
  박상수)	
  
(20m	
  24s)
출제 :	
  	
  kcm1700	
  	
  (김찬민)	
  
분류 : Convex-­‐Hull
PC.	
  XhCompany
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
(1,A[1])
(2,A[1]+A[2])
(3,A[1]+A[2]+A[3])
…
(N,A[1]+A[2]+…+A[N])
여기서 두 점을 이었을 때의 기울기가 밀도가 됩니다.
적절히 컨벡스 헐을 이용하여 구할 수 있습니다.
PC.	
  XhCompany
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
문제 : https://www.acmicpc.net/problem/10214
제출 수 :	
  	
  	
  112
정답 수 :	
  	
  	
  88	
  	
  (78.6%)
첫 정답자 :	
  	
  HisPSPartner @KAIST	
  (etaehyun4,	
  이태현)
(1m	
  4s)
출제 :	
  	
  xhae (류현종)
분류 :	
  	
  Implementation,	
  Ad-­‐hoc
A.	
  Baseball
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
Solution	
  1
for (int i =  0;  i <  9;  i++){
cin >>  score[0]  >>  score[1];
yonsei +=  score[0];
korea +=  score[1];
}
if (yonsei >  korea)  cout <<  "Yonsein";
else if (korea >  yonsei)  cout <<  "Korean";
else cout <<  "Drawn";
A.	
  Baseball
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
Solution	
  2
while (T-­‐-­‐)  cout <<  "Yonsein";
A.	
  Baseball
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
F.	
  MeatsOnTheGrill
문제 : https://www.acmicpc.net/problem/10219
제출 수 :	
  	
  77
정답 수 :	
  	
  49	
  	
  (63.6%)
첫 정답자 :	
  hydrogen	
  @서울대 (csehydrogen,	
  김희훈)
(19m	
  57s)
출제 :	
  	
  kriii (김경근)
분류 :	
  	
  Implementation,	
  Ad-­‐hoc
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
F.	
  MeatsOnTheGrill
좌우 대칭,	
  상하 대칭 중 하나를 골라서 고기를 뒤집어
출력하시면됩니다.
고기 먹고 싶다…
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
C.	
  CountCircleGroups
문제 : https://www.acmicpc.net/problem/10216
제출 수 :	
  	
  358
정답 수 :	
  	
  	
  60	
  	
  (16.8%)
첫 정답자 :	
  RiKang @고려대 (RiKang,	
  이승재)
(7m	
  47s)
출제 :	
  	
  xhae (류현종)	
  	
  
분류 :	
  	
  Geometry +	
  Graph
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
C.	
  CountCircleGroups
1.	
  if	
  dist(i,	
  j)	
  <=	
  r[i]	
  +	
  r[j]:	
  Connected!
2.	
  Build	
  graph from	
  fact	
  1.
3.	
  Graph	
  travel(BFS,	
  DFS,	
  …)	
  to	
  count
the	
  number	
  of	
  groups
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
E.	
  Maze
문제 : https://www.acmicpc.net/problem/10218
제출 수 :	
  	
  	
  92
정답 수 :	
  	
  	
  30 (32.6%)
첫 정답자 :	
   pps789	
  @서울대 (pps789,	
  박상혁)
(51m  50s)
출제 :	
  	
  kcm1700	
  	
  (김찬민)
분류 :	
  	
  Perfect	
  search	
  +	
  implementation
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
E.	
  Maze
Solution
 1.
가능한 모든 상태 공간을 BFS로 탐색
|답|
 ≤
 10이므로,
 최대 410 의 크기를 탐색한다.
tip.
 상태를 2(10-2)x(10-2)로 encode하고 중복 검사를 하면 훨씬 빠르다.
Solution
 2.
잘 생각해보면 직전 행동의 90도 방향 이동만
시도해볼 가치가 있으므로 210 탐색만 해도 된다.
시간복잡도:
 O(2|답| N2)
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
G.SelfRepresentingSeq
문제 : https://www.acmicpc.net/problem/10220
제출 수 :	
  	
  44
정답 수 :	
  	
  26 (59.1%)
첫 정답자 :	
   ainta @서울과고 (ainta,	
  조승현)
(56m	
  24s)
출제 :	
  	
  kriii (김경근)
분류 :	
  	
  Ad-­‐hoc
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
G.SelfRepresentingSeq
• 간단한 성질 :
(모든 수가 나오는 횟수를 더하면 N)
• 비슷하게 :
(첫 성질과 A의 정의 때문)
• 이를 통해 작은 N에 대해서 완전탐색을 하면 답이 보임
→ 증명도 어렵지 않음
if (N  =  3  ||  N  ==  6)  A  =  0;
else if (N  ==  4)  A  =  2;
else A  =  1;
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
D.	
  KCMTravel
문제 : https://www.acmicpc.net/problem/10217
제출 수 :	
  	
  	
  216
정답 수 :	
  	
  	
  47 (21.8%)
첫 정답자 :	
  	
  RiKang @고려대 (RiKang,	
  이승재)
(75m	
  32s)
출제 :	
  	
  xhae (류현종)
분류 :	
  	
  Dynamic	
  Programming
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
D.	
  KCMTravel
• Dynamic
 Programming혹은 Dijkstra
• D[i][j]
 =
 i번 마을까지 이동했고,
 이동 비용이 j일
때 최단 시간
• Dijkstra도 비슷함
• 시간복잡도:
 O(M(N+K))
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
B.	
  ColoredBeadWorks
문제 : https://www.acmicpc.net/problem/10215
제출 수 :	
  	
   57
정답 수 :	
  	
  	
  4 (16.7%)
첫 정답자 :	
  Let	
  Me	
  Win	
  @서울대 (corea,	
  윤형석)
(144m	
  26s)
출제 :	
  	
  altertain (이태윤)
분류 :	
  	
  Dynamic	
  Programming
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션
Vu	
  Pham
B.	
  ColoredBeadWorks
형태란 현재판에서 E,G,W를 0,1,2로 바꾼 후 일열로
늘어놓아 삼진법으로 나타낸 것을 의미한다고 하자.
D[i][j]	
  =	
  i번째 action까지 진행했을때,	
  형태가 j가 될
확률
형태는 3^16	
  =	
  43046721가지가 가능하므로
mapint,	
  double	
  D[N];	
  을 이용해야한다.
나머지는“그냥” 구현 문제 :)	
  야!	
  신난다~
Coder’s	
  	
  High	
  	
  2014	
  	
  해법 설명 프레젠테이션

Coder’s High 2014 풀이

  • 1.
    Vu  Pham Coder’s  High  2014 해법 설명 프레젠테이션 Coder’s    High    2014    해법 설명 프레젠테이션 August  30,  2014
  • 2.
    Vu  Pham 문제 :https://www.acmicpc.net/problem/10211 제출 수 :    125 정답 수 :    56    (44.8%) 첫 정답자 :  RiKang @고려대 (RiKang,  이승재) (2m  42s) 출제 :    myungwoo (전명우)   분류 : Greedy  +  Implementation PA.  MaximumSubarray Coder’s    High    2014    해법 설명 프레젠테이션
  • 3.
    Vu  Pham for (inti=1;i<=N;i++){ s  +=  X[i]; if (m  <  s)  m  =  s; if  (s  <  0)  s  =  0; } PA.  MaximumSubarray Coder’s    High    2014    해법 설명 프레젠테이션
  • 4.
    Vu  Pham 문제 :https://www.acmicpc.net/problem/10212 제출 수 :    773 정답 수 :    38    (4.9%) 첫 정답자 :  0YES  @한양대 (hj_929,  이현지)   (44m  34s) 출제 :    kriii (김경근)   분류 : Ad-­‐hoc PB.  Mystery Coder’s    High    2014    해법 설명 프레젠테이션
  • 5.
    Vu  Pham 여러가지방법이 있는데, 1)    srand(&a);  후 랜덤 쓰기 2)    puts(((int)(&a)>>20)%2?”Yonsei”:”Korea”); 3)    fopen이 사용가능하므로 적절히 쓰기 등등… PB.  Mystery Coder’s    High    2014    해법 설명 프레젠테이션
  • 6.
    Vu  Pham 문제 :https://www.acmicpc.net/problem/10213 제출 수 :    104 정답 수 :    8    (7.692%) 첫 정답자 :  cki86201  @서울과고(cki86201,  박상수)   (20m  24s) 출제 :    kcm1700    (김찬민)   분류 : Convex-­‐Hull PC.  XhCompany Coder’s    High    2014    해법 설명 프레젠테이션
  • 7.
    Vu  Pham (1,A[1]) (2,A[1]+A[2]) (3,A[1]+A[2]+A[3]) … (N,A[1]+A[2]+…+A[N]) 여기서 두점을 이었을 때의 기울기가 밀도가 됩니다. 적절히 컨벡스 헐을 이용하여 구할 수 있습니다. PC.  XhCompany Coder’s    High    2014    해법 설명 프레젠테이션
  • 8.
    Vu  Pham 문제 :https://www.acmicpc.net/problem/10214 제출 수 :      112 정답 수 :      88    (78.6%) 첫 정답자 :    HisPSPartner @KAIST  (etaehyun4,  이태현) (1m  4s) 출제 :    xhae (류현종) 분류 :    Implementation,  Ad-­‐hoc A.  Baseball Coder’s    High    2014    해법 설명 프레젠테이션
  • 9.
    Vu  Pham Solution  1 for(int i =  0;  i <  9;  i++){ cin >>  score[0]  >>  score[1]; yonsei +=  score[0]; korea +=  score[1]; } if (yonsei >  korea)  cout <<  "Yonsein"; else if (korea >  yonsei)  cout <<  "Korean"; else cout <<  "Drawn"; A.  Baseball Coder’s    High    2014    해법 설명 프레젠테이션
  • 10.
    Vu  Pham Solution  2 while(T-­‐-­‐)  cout <<  "Yonsein"; A.  Baseball Coder’s    High    2014    해법 설명 프레젠테이션
  • 11.
    Vu  Pham F.  MeatsOnTheGrill 문제: https://www.acmicpc.net/problem/10219 제출 수 :    77 정답 수 :    49    (63.6%) 첫 정답자 :  hydrogen  @서울대 (csehydrogen,  김희훈) (19m  57s) 출제 :    kriii (김경근) 분류 :    Implementation,  Ad-­‐hoc Coder’s    High    2014    해법 설명 프레젠테이션
  • 12.
    Vu  Pham F.  MeatsOnTheGrill 좌우대칭,  상하 대칭 중 하나를 골라서 고기를 뒤집어 출력하시면됩니다. 고기 먹고 싶다… Coder’s    High    2014    해법 설명 프레젠테이션
  • 13.
    Vu  Pham C.  CountCircleGroups 문제: https://www.acmicpc.net/problem/10216 제출 수 :    358 정답 수 :      60    (16.8%) 첫 정답자 :  RiKang @고려대 (RiKang,  이승재) (7m  47s) 출제 :    xhae (류현종)     분류 :    Geometry +  Graph Coder’s    High    2014    해법 설명 프레젠테이션
  • 14.
    Vu  Pham C.  CountCircleGroups 1.  if  dist(i,  j)  <=  r[i]  +  r[j]:  Connected! 2.  Build  graph from  fact  1. 3.  Graph  travel(BFS,  DFS,  …)  to  count the  number  of  groups Coder’s    High    2014    해법 설명 프레젠테이션
  • 15.
    Vu  Pham E.  Maze 문제: https://www.acmicpc.net/problem/10218 제출 수 :      92 정답 수 :      30 (32.6%) 첫 정답자 :   pps789  @서울대 (pps789,  박상혁) (51m  50s) 출제 :    kcm1700    (김찬민) 분류 :    Perfect  search  +  implementation Coder’s    High    2014    해법 설명 프레젠테이션
  • 16.
  • 17.
     1. 가능한 모든 상태공간을 BFS로 탐색 |답|
  • 18.
  • 19.
  • 20.
     최대 410 의크기를 탐색한다. tip.
  • 21.
     상태를 2(10-2)x(10-2)로 encode하고중복 검사를 하면 훨씬 빠르다. Solution
  • 22.
     2. 잘 생각해보면 직전행동의 90도 방향 이동만 시도해볼 가치가 있으므로 210 탐색만 해도 된다. 시간복잡도:
  • 23.
     O(2|답| N2) Coder’s    High    2014    해법 설명 프레젠테이션
  • 24.
    Vu  Pham G.SelfRepresentingSeq 문제 :https://www.acmicpc.net/problem/10220 제출 수 :    44 정답 수 :    26 (59.1%) 첫 정답자 :   ainta @서울과고 (ainta,  조승현) (56m  24s) 출제 :    kriii (김경근) 분류 :    Ad-­‐hoc Coder’s    High    2014    해법 설명 프레젠테이션
  • 25.
    Vu  Pham G.SelfRepresentingSeq • 간단한성질 : (모든 수가 나오는 횟수를 더하면 N) • 비슷하게 : (첫 성질과 A의 정의 때문) • 이를 통해 작은 N에 대해서 완전탐색을 하면 답이 보임 → 증명도 어렵지 않음 if (N  =  3  ||  N  ==  6)  A  =  0; else if (N  ==  4)  A  =  2; else A  =  1; Coder’s    High    2014    해법 설명 프레젠테이션
  • 26.
    Vu  Pham D.  KCMTravel 문제: https://www.acmicpc.net/problem/10217 제출 수 :      216 정답 수 :      47 (21.8%) 첫 정답자 :    RiKang @고려대 (RiKang,  이승재) (75m  32s) 출제 :    xhae (류현종) 분류 :    Dynamic  Programming Coder’s    High    2014    해법 설명 프레젠테이션
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
     이동 비용이 j일 때최단 시간 • Dijkstra도 비슷함 • 시간복잡도:
  • 32.
     O(M(N+K)) Coder’s    High    2014    해법 설명 프레젠테이션
  • 33.
    Vu  Pham B.  ColoredBeadWorks 문제: https://www.acmicpc.net/problem/10215 제출 수 :     57 정답 수 :      4 (16.7%) 첫 정답자 :  Let  Me  Win  @서울대 (corea,  윤형석) (144m  26s) 출제 :    altertain (이태윤) 분류 :    Dynamic  Programming Coder’s    High    2014    해법 설명 프레젠테이션
  • 34.
    Vu  Pham B.  ColoredBeadWorks 형태란현재판에서 E,G,W를 0,1,2로 바꾼 후 일열로 늘어놓아 삼진법으로 나타낸 것을 의미한다고 하자. D[i][j]  =  i번째 action까지 진행했을때,  형태가 j가 될 확률 형태는 3^16  =  43046721가지가 가능하므로 mapint,  double  D[N];  을 이용해야한다. 나머지는“그냥” 구현 문제 :)  야!  신난다~ Coder’s    High    2014    해법 설명 프레젠테이션
  • 35.
    Vu  Pham I.  TonsOfDamage 문제: https://www.acmicpc.net/problem/10222 제출 수 :      62 정답 수 :      4    (6.5%) 첫 정답자 :   Doju @서울대 (doju,  임동재) (144m  26s) 출제 :    kriii (김경근) 분류 :    Math – Linearity  of  Expectation Coder’s    High    2014    해법 설명 프레젠테이션
  • 36.
  • 37.
     공격력 관련 효과를i번 받았을 때,
  • 38.
  • 39.
     주문력 관련 효과를i번 받았을 때,
  • 40.
  • 41.
     궁극기를 i번 사용시공격력 관련 효과를 j번 받을 확률 점화식은 아래와 같다. 답은 Coder’s    High    2014    해법 설명 프레젠테이션
  • 42.
    Vu  Pham J.  Fertilizing 문제: https://www.acmicpc.net/problem/10223 제출 수 :      36 정답 수 :      2 (5.6%) 첫 정답자 :  Let  Me  Win  @서울대 (corea,  윤형석)   (244m  01s) 출제 :    kriii (김경근) 분류 :    Greedy  +  Segment tree Coder’s    High    2014    해법 설명 프레젠테이션
  • 43.
    Vu  Pham J.  Fertilizing 비료를주는 과정을 따라 하다 보면 알 수 있는 사실 : 첫 번째 시점.
  • 44.
     i 번째 날이끝난 후 가장 큰 콩나무와 가장 작은 콩나무의 크기차가 i이하이다. 두 번째 시점 i+1번째 날이 되었을 때 가장 작은 몇 개의 콩나무에게 크기가 i+1자라는 비료를 준다.
  • 45.
      원래 가장 작았던콩나무가 원래는 가장 컸던 콩나무보다도 높 게 자란다! 다시 첫 번째 시점.
  • 46.
  • 47.
     번째 날이 끝난후 가장 큰 콩나무와 가장 작은 콩나무의 크기차가 i+1이하이다. Coder’s    High    2014    해법 설명 프레젠테이션
  • 48.
    Vu  Pham J.  Fertilizing 앞의관찰을 바탕으로 첫 날에 모든 콩나무를 일렬로 놓았다고 하면 각 날마다 가장 앞에 있는 C개에게 비 료를 주고,
  • 49.
     뒤로 보내면 크기순서가 유지된다는 것 을 알 수 있습니다. (실제로는 직접 뒤로 보내는 것이 아니라 가장 작은 콩나무의 위치를 기억함) 콩나무의 크기는 세그먼트 트리나 BIT등의 자료구조 를 통해 저장하고 필요할 때 꺼내서 쓰면 됩니다. Coder’s    High    2014    해법 설명 프레젠테이션
  • 50.
    Vu  Pham H.  TestDataAnalysis 문제: https://www.acmicpc.net/problem/10221 제출 수 :     15 정답 수 :      2      (13.3%) 첫 정답자 :  RiKang @고려대 (RiKang,  이승재) (70m  43s) 출제 :    kriii (김경근) 분류 :    Dynamic Programming Coder’s    High    2014    해법 설명 프레젠테이션
  • 51.
    Vu  Pham H.  TestDataAnalysis lMaximum  Subarray 문제를 푸는 법 for (int i=1;i=N;i++){ s  +=  X[i]; if (m    s)  m  =  s; if  (s    0)  s  =  0; } 이를 이용한 가장 보편적인다이나믹정의 물론 네제곱,  잘해도 세제곱이라안 됩니다. Coder’s    High    2014    해법 설명 프레젠테이션
  • 52.
    Vu  Pham H.  TestDataAnalysis 다이나믹인자가답의 정보(m)를 저장하면 힘들다! 특정한 d이하인것들만 구하려고 하면 어떨까?? (d이하인 것들의 개수)  – (d-­‐1이하인 것들의 개수) =  (d인 것들의 개수) 그냥 하면 세제곱이니제곱으로잘 줄입시다. 음수인 경우는 쉬우니 생략합니다. Coder’s    High    2014    해법 설명 프레젠테이션
  • 53.
    Vu  Pham K.  Watering 문제: https://www.acmicpc.net/problem/10224 제출 수 :      32 정답 수 :      1    (3.1%) 첫 정답자 :  pichulia@고려대 (pichulia,  홍은기) (119m  55s) 출제 :    xhae (류현종) 분류 :    Geometry Coder’s    High    2014    해법 설명 프레젠테이션
  • 54.
    Vu  Pham K.  Watering Coder’s    High    2014    해법 설명 프레젠테이션 디렉터 째의 저자직강이 있겠습니다.
  • 55.
    Vu  Pham Special  Thanks  to… Coder’s    High    2014    해법 설명 프레젠테이션 출제진 -­‐ 김경근,  김찬민,  류현종,  이태윤,  전명우 스태프 -­‐ 고창영,  김선영,  김숭,  김치호,  김태완,  박성규,  서민영,   신혜빈,  이준규,  이태승 그리고 BOJ의 최백준 님
  • 56.
    Vu  Pham Coder’s  High  2014 Coder’s    High    2014    해법 설명 프레젠테이션 수고하셨습니다!!! See  you  on  Coder’s  High  2015