할인

시간 제한1초메모리 제한128 MB

요약
각 제품에 대해 B개 구매 시 F개 무료라는 할인 조건과 구매 수량이 주어질 때, 수량별로 최대로 절약할 수 있는 금액을 계산한다.
난이도

보통10점 중 4점

유형
동적 계획법, 그리디, 구현, 수학
정답자
아직 제출이 없습니다

문제

피터의 가게는 장사가 잘 되지 않아, 그는 매출을 늘릴 방법을 찾고 있습니다. 그의 최신 아이디어는 "세 개를 사면 한 개를 공짜로 주는" 방식의 할인 행사입니다. 그는 이런 특별 할인이 더 많은 손님을 가게로 불러들이기를 기대하고 있습니다. 여러분이 할 일은, 손님이 얼마를 아낄 수 있는지 쉽게 알 수 있도록 피터를 도와주는 프로그램을 작성하는 것입니다.

입력

입력은 여러 개의 상품 시나리오로 이루어집니다.

각 시나리오는 한 줄에 상품의 이름으로 시작합니다. 이름은 공백으로 구분된 하나 이상의 단어로 이루어집니다. # 한 글자만 있는 줄은 입력의 끝을 나타내며, 이 항목은 처리하지 않습니다.

다음 줄에는 공백으로 구분된 두 정수 PDPD와 PCPC (0≤PD≤500 \le PD \le 50, 0≤PC≤990 \le PC \le 99)가 주어집니다. 이는 상품 한 개의 가격을 각각 달러와 센트로 나타낸 것입니다. PDPD와 PCPC가 동시에 00인 경우는 없습니다.

그다음 줄에는 정수 DD (0<D≤100 < D \le 10), 즉 이 상품에 적용할 수 있는 할인의 개수가 주어집니다. 이어서 DD개의 줄이 주어지며, 각 줄에는 공백으로 구분된 두 정수 BB와 FF (0<B,F≤1000 < B, F \le 100)가 있습니다. BB는 반드시 사야 하는 개수이고, FF는 그렇게 샀을 때 공짜로 받을 수 있는 개수입니다.

그다음 줄에는 정수 EE (0<E≤300 < E \le 30), 즉 뒤따르는 질의의 개수가 주어집니다. 이어지는 EE개의 줄에는 각각 500500보다 작은 양의 정수 하나가 주어지며, 이는 손님이 사려는 물건의 개수입니다. 주어진 할인들을 이용해 손님이 얻을 수 있는 최대 절약 금액을 구하세요. 손님이 할인으로 주어지는 공짜 물건을 모두 받을 필요는 없다는 점에 유의하세요.

출력

각 상품마다 한 구역씩 출력합니다. 각 구역은 상품의 이름을 한 줄에 출력하는 것으로 시작하고, 이어서 입력과 같은 순서로 질의마다 한 줄씩 총 EE줄을 출력합니다. 각 줄의 형식은 다음과 같습니다.

Buy N, save $D

여기서 N은 요청한 개수이고, D는 공짜 물건을 하나도 받지 않았을 때와 비교해 절약한 금액입니다. D는 다음 형식으로 씁니다.

d.dd

즉, 달러 부분은 최소 한 자리, 소수점, 그리고 센트 부분은 정확히 두 자리로 나타냅니다.

인접한 두 상품 구역 사이는 빈 줄로 구분합니다.

예제2

  1. 예제 1

    입력
    Baked Beans
    0 95
    3
    12 1
    36 5
    100 12
    6
    10
    26
    40
    41
    54
    153
    #
    
    예상 출력
    Baked Beans
    Buy 10, save $0.00
    Buy 26, save $1.90
    Buy 40, save $3.80
    Buy 41, save $4.75
    Buy 54, save $5.70
    Buy 153, save $16.15
    
  2. 예제 2

    입력
    Milk
    1 50
    1
    2 1
    3
    1
    3
    7
    Big Widget
    12 0
    1
    3 2
    2
    4
    5
    #
    
    예상 출력
    Milk
    Buy 1, save $0.00
    Buy 3, save $1.50
    Buy 7, save $3.00
    
    Big Widget
    Buy 4, save $12.00
    Buy 5, save $24.00