책임감 있는 음주
시간 제한1초메모리 제한256 MB
최대 여덟 가지 음료를 정수 개수로 조합해 지출이 정확히 m이 되고 알코올이 정확히 u가 되는 구매를 찾고 사전 순으로 가장 앞선 경우를 출력합니다.
문제
라가도 대학교는 신입생 주간에 맥주 시음회를 연다. 안전을 위해 학교는 학생 한 명이 쓸 수 있는 금액에 상한을 두고, 학생은 그날 밤 마실 알코올의 양을 스스로 정해 둔다.
음료는 1리터, 2분의 1리터, 3분의 1리터 중 한 가지 크기로 나온다. 알코올 1단위는 도수가 1퍼센트인 음료 1리터에 들어 있는 알코올의 양이다. 따라서 도수가 퍼센트인 음료를 리터 크기로 마시면 단위를 마신다.
학생은 가진 돈 을 한 푼도 남기지 않고 전부 쓰면서 알코올을 정확히 단위 마시려 한다. 더 마셔도 안 되고 덜 마셔도 안 된다. 같은 음료는 몇 잔이든 살 수 있고, 한 잔도 사지 않아도 된다. 이런 구매가 가능한지 판정하고, 가능하면 무엇을 몇 잔 사야 하는지 출력하라.
입력
첫째 줄에 세 값이 주어진다.
- (): 쓸 수 있는 돈이며 소수점 아래 두 자리로 주어진다.
- (): 마시려는 알코올의 단위 수이며 소수점 아래 한 자리로 주어진다.
- (): 파는 음료의 종류 수.
다음 개 줄에는 각각 네 값이 공백 하나로 구분되어 주어진다.
- 음료의 이름: 길이가 20 이하인 영어 소문자 문자열이며 개 이름은 서로 다르다.
- 도수: 0 이상 100 이하의 정수 퍼센트.
- 크기: 1리터면
1/1, 2분의 1리터면1/2, 3분의 1리터면1/3. - 가격: 0.00 이상 10.00 이하의 실수이며 소수점 아래 두 자리로 주어진다.
출력
돈을 정확히 만큼 쓰면서 알코올을 정확히 단위 마시는 방법이 없으면 첫째 줄에 IMPOSSIBLE을 출력한다.
방법이 있으면 산 음료마다 한 줄씩, 입력에 나온 순서대로 이름과 산 잔 수를 공백 하나로 구분해 출력한다. 한 잔도 사지 않은 음료는 출력하지 않는다.
가능한 방법이 여러 가지일 수 있다. 입력의 번째 음료를 산 잔 수를 라 하고 한 가지 방법을 수열 로 나타낼 때, 사전순으로 가장 앞서는 방법을 출력한다. 즉 이 가장 작은 방법을 고르고, 그중에서 가 가장 작은 방법을 고르고, 이런 식으로 끝까지 정한다.
이 0.01 이상이므로 방법이 존재하면 적어도 한 잔은 사게 되고, 출력이 비는 일은 없다.