[2018 SCPC 본선]
2차원 평면인 기판에 \(N\)개의 양극점과 \(N\)개의 음극점이 있다.
기판에 배선을 해야 하는데, 배선은 하나의 양극점과 하나의 음극점을 잇는 선분이어야 한다.
이러한 배선을 최대한 많은 양극점과 음극점의 쌍에 대해서 만들고 싶다.
단, 아래의 두 조건이 만족되어야 한다.
- 양극점이나 음극점 하나에 연결된 배선은 최대 하나이다.
- 두 배선이 교차하면 안된다.
아래 그림은 \(N=6\)인 경우이며, 6개의 배선을 조건에 맞게 구성한 것을 보여준다.
보기 편하도록 양극점은 별로, 음극점은 삼각형으로 표시하였다.
이 문제의 목표는 가능한 많은 배선을 만드는 것이다.
아래 테스트 케이스 그룹에 점수를 정하는 방법이 나와 있다.
입력 파일에는 여러 테스트 케이스가 포함될 수 있다.
파일의 첫째 줄에 테스트 케이스의 개수를 나타내는 자연수 \(T\) 가 주어지고,
이후 차례로 \(T\) 개의 테스트 케이스가 주어진다. \((1 ≤ T ≤26 )\)
각 테스트 케이스의 첫 줄에는 양극점과 음극점의 개수 \(N\)이 주어진다.\((1≤N≤50,000)\)
다음 \(N\)개의 줄에는 양극점의 좌표가 \(x\)와 \(y\) 좌표로 주어진다.
그 다음 \(N\)개의 줄에는 음극점의 좌표가 \(x\)와 \(y\) 좌표로 주어진다.
양극점과 음극점은 주어진 순서대로 1번부터 \(N\)번까지 번호가 붙어 있다. 좌표 값은 1 이상 1,000,000,000 이하의 정수이다.
주어진 \(2N\)개의 점들 중 2개 이상이 동일한 위치이거나, 3개 이상이 한 직선 위에 있는 경우는 없다. 점들은 랜덤한 좌표에 주어진다.
각 테스트 케이스의 답을 순서대로 표준출력으로 출력하여야 하며,
각 테스트 케이스마다 첫 줄에는 “Case #C”를 출력하여야 한다.
이때 \(C\)는 테스트 케이스의 번호이다.
그 다음 줄에 여러분의 프로그램이 찾은 배선의 개수 \(L\) 을 출력한다.
다음 \(L\) 개의 줄에 배선으로 이어진 양극점과 음극점의 번호 쌍을 한 줄에 하나씩 출력한다.
(양극점과 음극점은 주어진 순서대로 1번부터 \(N\)번까지 번호가 붙어 있다.)
입력 |
---|
2 2 1 1 2 2 4 2 3 1 3 1 1 1 3 2 2 4 2 4 1 3 4 |
출력 |
---|
Case #1 2 1 2 2 1 Case #2 2 1 1 3 3 |