pstopia Notes for Problem Solving Contest

[C] New Year Snowmen

Codeforces Round #100

Problem

개수가 많은 순으로 3종류의 눈사람을 고른다. 3종류의 눈을 하나씩 뽑아 눈사람을 하나 만든다. 이 과정을 반복하면 눈사람을 최대로 만들 수 있다. 증명 답을 k라고 하자. 눈이 k개보다 많은 눈은 k개로 만들어도 된다. 어차피 초과분은 눈사람을 만드는데 쓰일 수 없기 때문에. 종류별 눈의 개수 <= k 눈사람을 k개 만들 것이므로 모든 눈의 총합은 3*k 이상이어야 한다. 전체 눈의 개수 >= 3*k 비둘기집의 원리에 의해 개수가 0이 아닌 눈종류가 항상 3종류 이상이다. 1) 눈의 개수 == k 인 눈종류가 3종류 이상인 경우 항상 확정적으로 k개의 눈사람을 만들 수 있다. 2) 눈의 개수 == k 인 눈종류가 2종류 이하인 경우 위의 알고리즘을 한번 수행하면 눈의 개수 == k 인 눈종류가 반드시 사라진다. 종류별 눈의 개수 <= k-1 전체 눈의 개수 >= 3*(k-1) 이건 답이 k-1일 때의 상황과 같다. 따라서 위 과정을 k번 반복하면 눈사람을 k개 만들 수 있게 된다.