게리맨더링
면접 대비시간 제한1초메모리 제한128 MB
각 구역의 P와 Q 득표수가 주어질 때, n개 구역을 두 개의 비어 있지 않은 선거구로 나누어 P가 이길 수 있는 선거구 수의 최댓값을 구한다.
문제
게리맨더링은 특정 정당에게 유리하도록 선거구를 나누는 기법이다. 원래 선거구는 유권자 간 대표성이 대체로 균등하도록 10년에 한 번씩 재검토하게 되어 있다. 그러나 집권 정당은 미래 선거에서 더 많은 의석을 얻기 위한 도구로 선거구 재획정을 활용하곤 한다. 이렇게 하면 많은 유권자의 표가 사실상 사표(死票)가 되어 원래 취지에 어긋나지만, 어쨌든 선거에서 이기기 위해 할 수 있는 일을 하는 셈이다.
게리맨더링을 잘 하려면 최적의 선거구를 계산하는 프로그램이 필요하다. 만들어진 선거구가 “자연스럽게” 보이지 않아도 상관없다. 이 문제에서는 여러 개의 선거 구역(precinct)을 정확히 두 개의 선거구(district)로 나눈다. 프로그램은 특정 정당이 최적의 게리맨더링으로 두 선거구를 모두 이길 수 있는지, 한 선거구만 이길 수 있는지, 아니면 하나도 이길 수 없는지를 판정해야 한다. 각 선거구는 최소한 하나의 구역을 포함해야 하지만, 두 선거구가 같은(또는 비슷한) 수의 구역을 가질 필요는 없다.
어떤 선거구에서 정당 P의 총 득표수가 정당 Q의 총 득표수보다 엄밀히 많을 때 P가 그 선거구를 이긴 것으로 본다. 두 정당의 득표수가 같으면 P가 이긴 것이 아니다.
입력
첫 줄에 입력에 포함된 데이터 집합의 개수 ()가 주어진다. 그 뒤로 아래 형식의 데이터 집합이 개 이어진다.
각 데이터 집합의 첫 줄에는 구역의 수 ()이 주어진다. 이어서 개의 줄에 각 구역 의 정보가 주어지며, 각 줄에는 두 정당 P와 Q에 투표할 것으로 예상되는 유권자 수 와 가 주어진다. 이 값들은 이상 이하이다.
출력
각 데이터 집합에 대해 먼저 Data Set x:를 한 줄에 출력한다. 여기서 는 데이터 집합의 번호(1부터 시작)이다. 그다음 줄에 최적의 게리맨더링으로 정당 P가 이길 수 있는 선거구의 최대 개수(, , 또는 )를 출력한다.