[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이

1,420 views

Published on

숭실대학교 알고리즘 동아리 SCCC 주최의 교내 프로그래밍 경시대회 문제풀이 입니다.

Published in: Engineering
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,420
On SlideShare
0
From Embeds
0
Number of Embeds
1,334
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이

  1. 1. 간절히 원하면 SCCC가 도와준다 접수 중입니다. 팀 명 / 비밀번호를 받아가서 자신의 자리에 앉아 주세요!
  2. 2. 프로그래밍 컨테스트란?  정해진 시간 동안, 정해진 문제를 가장 빠르고 정확하게 푸는 것을 목표로 하는 대회.  문제를 푼 개수, 문제를 푼 시간 순으로 페널티가 주어 져서 등수를 매긴다.
  3. 3. SOONGSIL COMPUTING CONTEST CLUB SCCC 컨테스트
  4. 4. 1. 숭실대 입구역 등반 시간을 분으로 바꿔주시면 됩니다. if (H * 60 + M + W <= 10 * 60 + 30) puts("Walk"); else if (H * 60 + M + R <= 10 * 60 + 30) puts("Run"); else puts(“망했어”); 코딩하기 편하게 H에 60을 곱해서 비교를 한다.
  5. 5. 2. 넌 강해졌다! 걸어가! 문제 설명과 데이터에 문제가 있어서 죄송합니다… 매 초마다 궁극기를 맞았을 때의 죽인 적의 개수를 모두 세면 됩니다. (시작하자 마자(0초) 바로 궁극기를 맞는 경우도 있어서 대회중에 문제가 되었습니다) For문을 돌면서 그 개수 중의 최대의 개수를 찾으면 됩니다.
  6. 6. 3. 날로먹는 컴수과제 컴퓨터의 정수 저장 방식과 자료형의 이해를 물어보는 문 제였습니다! 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 =2147483647 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 =2147483648 =-2147483648 1 =-2147483647 ans++;
  7. 7. 3. 날로먹는 컴수과제 4바이트가 작다고? 그럼 더 큰 걸 쓰면 되지! int → long long 4바이트 → 8바이트 대입연산에 유의! int main() { int a; long long b=0; scanf(“%d”,&a); b|=a; printf(“%lld”,&b); return 0; } 앞의 부호비트도 수 표현하는데 쓰 면 안되나? int → unsigned int 4바이트 그대로, 하지만 32개의 비 트 사용 int main() { int a; scanf(“%d”,&a); printf(“%u”,&a); return 0; }
  8. 8. 4. K번째 큰 원소 풀이 말 그대로 집합을 만들어 넣으면서 K번째 큰 원소를 for문을 이용해 찾으면 된다. 여기서 집합은 중복을 허용하지 않으니 그것을 처리해 주어야 한다 Ex) 1 2 2 3 3 5가 주어지면 집합은 1 2 3 5가 된다. 그래서 4번째 큰 숫자로 하면 1이 나와야 한다. 참고로 STL에 Set(집합)이 구현되어 있으니 그것을 쓰면 매우 편하 게 코딩 할 수 있다.
  9. 9. 5. 성우의 과제 제출 이 문제는 마감시간에 최대한 높은 점수의 과제를 제출해야 하는 문제이다. 따라서 마감시간기준 오름차순 정렬 한 후에 min heap(cost가 작은 게 루트에 오도록)에 담는다. heap size() 는 day 가 되며, heap size 와 dead_line 이 같은 경우에는 heap top 과 현재 들어와야 하는 과제의 점수를 비교하여 들어와야 하는 과제의 점수가 크면 heap pop 후에 새로운 과제를 push 해준다.
  10. 10. 6. 영선이의 빵 문제를 해석해 보면 y = (k / l) * x(1 <= x <= n, 1 <= y <= m) 에서 격자 점을 찾는 문제이다. 격자 점은 x에서는 k의 배수만큼, y에서는 l의 배수만큼 생기니 둘 중 작은 값을 취해주면 된다. 예를 들면 기울기가 3/5 이며 방 크기가 (20, 30)이면 x는 5씩 갈 때마다 하나씩 격자 점이 생기 며, y는 3씩 갈 때마다 하나씩 격자 점이 생기니, x에서는 4개, y에서는 10개가 생기는데 둘 중 작은 값인 4개 + (0, 0) 1개 5개가 된다. 여기서 주의할 점은 k / l이 기약분수가 아닐 수 있으니 기약분수로 나누어 주어야 한다. 만약 격자 점을 전부 세 나갈 경우 최악엔 10^18개를 샐 수 있으니 시간이 부족하게 된다.
  11. 11. 7. 뻥치는 간식 행사 이 문제에서 뻥 치는 횟수(M)에 대해 일단 분석해 보면, 학생 수 보다 간식 번호가 많으니 사실 M번의 뻥을 친다고 했지만, 학생들이 원하지 않는(예를 들면 예제에서는 4와 같은 간식) 간식을 부르면 되니 M번 이하의 거짓말을 할 때 연속된 최대의 학생들의 수를 뽑으면 된다. 그리고 이 문제를 풀기 위해선 일단 한가지 성질을 알아야 된다. 만약 어떤 특정 구간(s, e)에 답이 존재 한다고 했을 때, 이 구간에 들어가 있는 간식의 종류는 M + 1개 이하야 된다는 것이다. 그래야 만이 특정 구간에 들어가 있는 다른 여러 간식들을 제외 시킬 수 있기 때문이다.
  12. 12. 추가 문제 문의 2016회장 이성화(010-7963-6402) 2017회장 차건환(010-5037-5292)

×