[d2 campus] 숭실대 sccc 프로그래밍 경시대회 문제 풀이

12
간절히 원하면 SCCC가 도와준다 접수 중입니다. 팀 명 / 비밀번호를 받아가서 자신의 자리에 앉아 주세요!

Upload: naver-d2

Post on 16-Apr-2017

3.270 views

Category:

Engineering


2 download

TRANSCRIPT

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

간절히 원하면 SCCC가 도와준다 접수 중입니다.

팀 명 / 비밀번호를 받아가서 자신의 자리에 앉아 주세요!

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

프로그래밍 컨테스트란?

정해진 시간 동안, 정해진 문제를 가장 빠르고 정확하게 푸는 것을 목표로 하는 대회.

문제를 푼 개수, 문제를 푼 시간 순으로 페널티가 주어져서 등수를 매긴다.

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

SOONGSIL COMPUTING CONTEST CLUB

SCCC 컨테스트

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

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을 곱해서 비교를 한다.

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

2. 넌 강해졌다! 걸어가!

문제 설명과 데이터에 문제가 있어서 죄송합니다… 매 초마다 궁극기를 맞았을 때의 죽인 적의 개수를 모두 세면 됩니다. (시작하자 마자(0초) 바로 궁극기를 맞는 경우도 있어서 대회중에 문제가 되었습니다) For문을 돌면서 그 개수 중의 최대의 개수를 찾으면 됩니다.

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

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++;

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

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; }

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

4. K번째 큰 원소 풀이

말 그대로 집합을 만들어 넣으면서 K번째 큰 원소를 for문을 이용해 찾으면 된다. 여기서 집합은 중복을 허용하지 않으니 그것을 처리해 주어야 한다 Ex) 1 2 2 3 3 5가 주어지면 집합은 1 2 3 5가 된다. 그래서 4번째 큰 숫자로 하면 1이 나와야 한다. 참고로 STL에 Set(집합)이 구현되어 있으니 그것을 쓰면 매우 편하게 코딩 할 수 있다.

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

5. 성우의 과제 제출

이 문제는 마감시간에 최대한 높은 점수의 과제를 제출해야 하는 문제이다. 따라서 마감시간기준 오름차순 정렬 한 후에 min heap(cost가 작은 게 루트에 오도록)에 담는다. heap size() 는 day 가 되며, heap size 와 dead_line 이 같은 경우에는 heap top 과 현재 들어와야 하는 과제의 점수를 비교하여 들어와야 하는 과제의 점수가 크면 heap pop 후에 새로운 과제를 push 해준다.

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

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개를 샐 수 있으니 시간이 부족하게 된다.

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

7. 뻥치는 간식 행사

이 문제에서 뻥 치는 횟수(M)에 대해 일단 분석해 보면, 학생 수 보다 간식 번호가 많으니 사실 M번의 뻥을 친다고 했지만, 학생들이 원하지 않는(예를 들면 예제에서는 4와 같은 간식) 간식을 부르면 되니 M번 이하의 거짓말을 할 때 연속된 최대의 학생들의 수를 뽑으면 된다.

그리고 이 문제를 풀기 위해선 일단 한가지 성질을 알아야 된다. 만약 어떤 특정 구간(s, e)에 답이 존재 한다고 했을 때, 이 구간에 들어가 있는 간식의 종류는 M + 1개 이하야 된다는 것이다. 그래야 만이 특정 구간에 들어가 있는 다른 여러 간식들을 제외 시킬 수 있기 때문이다.

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

추가 문제 문의

2016회장 이성화(010-7963-6402)

2017회장 차건환(010-5037-5292)