음식 배급량 정하기
시간 제한1초메모리 제한128 MB
학생마다 최대 3번까지 배식받을 수 있을 때, 실수인 1인분 크기 S를 정해 a*(남긴 음식) + b*(배식 횟수)를 최소로 만들고 그 값을 기약분수로 출력한다.
문제
대학 학생 식당은 어떤 학생도 배고픈 채로 나가지 않기를 바란다. 그래서 학생이 아직 배가 고프면 언제든지 음식을 한 그릇 더 무료로 받을 수 있다. 식당은 학생마다 얼마나 먹을지 일일이 묻기에는 시간이 너무 오래 걸리므로, 항상 정해진 하나의 배급량 만큼씩 음식을 담아 준다. 이 때문에 학생이 마지막에 받은 그릇을 다 먹지 못할 수 있고, 남은 음식은 버려야 한다.
식당 관리자는 비용을 줄이기 위해, 버려지는 음식이 적으면서도 학생이 음식을 다시 받으러 가는 횟수가 너무 많지 않도록 배급량 를 정하고 싶다. 두 목표는 서로 충돌한다.
- 를 아주 작게 잡으면 버려지는 음식은 거의 없지만, 학생들이 음식을 받으러 가는 횟수가 많아진다.
- 를 아주 크게 잡으면 학생마다 한 번만 받아도 되지만, 버려지는 음식의 양이 많아질 수 있다.
관리자는 각 학생이 몇 단위의 음식을 먹는지 조사해 두었다. 버려지는 음식의 총량을 , 학생들이 음식을 받으러 가는 총횟수를 라 하자. 목표는 를 최소화하는 것이며, 가중치 와 는 두 목표의 상대적 중요도를 나타낸다. 와 는 배급량 (양의 실수라면 무엇이든 될 수 있다)와 각 학생이 먹는 양에 따라 정해진다. 추가로 한 가지 규칙이 있다. 어떤 학생도 음식을 번을 초과해 받으러 가서는 안 된다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 학생 수를 나타내는 정수 ()이 주어진다. 다음 줄에는 두 정수 와 ()가 주어진다. 셋째 줄에는 개의 정수 ()이 주어지며, 는 학생 가 먹는 음식의 단위 수이다. 입력의 끝은 인 줄로 표시되며, 이 줄은 처리하지 않는다.
출력
각 테스트 케이스마다, 가능한 모든 배급량 중에서 얻을 수 있는 의 최솟값을 한 줄에 출력한다. 값은 기약분수 p / q 형태로 출력한다. 값이 정수이면 분자만 출력하고 분모 은 생략한다.