공정한 배심원단
시간 제한1초메모리 제한128 MB
후보 풀에서 정확히 m명을 골라 방어 합과 기소 합의 차이 절댓값을 최소로 만들고, 그런 배심원단 중 두 합의 최댓값을 구한다.
문제
브루토피아에서는 법정 판결을 일반 시민으로 구성된 배심원단이 내린다. 재판을 시작하기 전에 후보자 명단에서 배심원단을 선정해야 한다.
명단에 있는 각 후보자 에 대해 검찰은 값 를, 변호인은 값 를 매기며, 두 값 모두 이상 이하의 정수이다. 값이 클수록 해당 측이 그 후보자를 더 적합하다고 평가한 것이다.
정확히 명의 후보자로 이루어진 배심원단 를 선택해야 한다. 선택한 배심원단 에 대해 다음과 같이 정의한다.
즉 는 변호인 측 값의 합, 는 검찰 측 값의 합이다.
재판이 공정하려면 배심원단이 어느 한쪽에도 치우치지 않아야 하므로 가 가능한 한 작아야 한다. 이 최소 차이를 달성하는 모든 배심원단 중에서는 양측 모두에게 가치가 큰 배심원단이 좋으므로 가 가능한 한 커야 한다.
후보자 명단이 주어질 때 이 두 최적 값을 구하라.
입력
입력은 여러 개의 배심원단 선정 라운드로 이루어진다.
각 라운드는 두 정수 과 이 적힌 줄로 시작한다. 은 후보자 수, 은 선정할 배심원 수이며 , , 을 만족한다.
이어지는 개의 줄에는 각각 두 정수 와 ()가 있으며, 이는 후보자 의 검찰 측 값과 변호인 측 값이다.
라운드 사이는 빈 줄로 구분될 수 있다. 입력은 0 0이 적힌 라운드로 끝나며, 이 라운드는 처리하지 않는다.
출력
각 라운드마다 세 줄을 출력한다.
첫 줄은 Jury #k이며 k는 부터 시작하는 라운드 번호이다. 둘째 줄은 달성 가능한 최소 차이를 출력한다. 셋째 줄은 그 최소 차이를 달성하는 배심원단 중 최대 합을 출력한다.
두 값은 정확히 다음 형식으로 출력한다.
Jury #k
Minimum difference |D(J) - P(J)| is X
Maximum total D(J) + P(J) is Y
여기서 X는 |D(J) - P(J)|의 최솟값이고, Y는 그 최소 차이를 달성하는 모든 배심원단에 대한 D(J) + P(J)의 최댓값이다.
각 라운드 뒤에는 빈 줄을 하나 출력한다.
힌트
이므로 정확히 명으로 이루어진 배심원단은 항상 존재한다. 가능한 모든 개의 배심원단을 전부 확인하는 완전 탐색은 주어진 제한에서 너무 느리다. 가 가질 수 있는 값에 대한 동적 계획법과 같은 효율적인 방법이 필요하다.