에어로빅 자리 배치
시간 제한5초메모리 제한512 MB
긴 변을 따라 정해진 탐욕 행 채우기 규칙으로 원 중심을 배치하고 좌표를 출력합니다.
문제
에어로빅 수업이 곧 시작한다. 강사는 학생들에게 매트 위에서 팔을 크게 휘둘러도 옆 사람과 부딪히지 않도록 자리를 잡으라고 말한다. 학생들이 자리를 정하지 못하고 계속 움직이기만 하자, 강사는 자리를 대신 계산해 달라고 부탁한다.
매트는 가로가 , 세로가 인 직사각형이다. 번 학생은 팔이 닿는 거리 를 반지름으로 하는 원을 혼자 차지해야 한다. 두 원은 서로 닿아도 되지만 겹칠 수는 없다. 학생은 매트 위에 서므로 중심 좌표는 와 을 만족한다. 팔은 매트 밖으로 나가도 된다.
매트는 넉넉하다. 매트의 넓이는 모든 원의 넓이를 더한 값의 5배 이상이다. 조건을 만족하는 배치는 항상 있고, 출력할 배치는 출력 항목에서 하나로 정한다.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다. 각 테스트 케이스는 두 줄이다. 첫째 줄에는 학생 수 , 매트의 가로 , 매트의 세로 이 정수로 주어진다. 둘째 줄에는 학생마다 팔이 닿는 거리 이 정수로 주어진다.
제한
출력
각 테스트 케이스마다 한 줄에 "Case #n: "을 출력하고, 이어서 번 학생의 위치 를 순서로 정수 개를 공백 하나로 구분해 출력한다. 은 1부터 시작하는 테스트 케이스 번호다. 아래 방법으로 만든 배치를 그대로 출력한다.
을 그 테스트 케이스에서 가장 큰 라고 하자. 학생은 입력에 주어진 순서대로 행에 채운다. 지금 행에 더 넣을 수 없는 학생이 나오면 그 학생부터 다음 행에 넣는다.
이면 행은 축과 평행하다. 를 0부터 세어 번 행에 있는 학생의 좌표는 모두 다. 행의 첫 학생은 에 선다. 나머지 학생은 같은 행에서 바로 앞에 놓인 학생의 좌표를 , 그 학생의 팔 길이를 , 자기 팔 길이를 라고 할 때, 가 이하면 그 값을 좌표로 쓰고, 보다 크면 다음 행의 에 선다.
이면 두 축을 바꿔 같은 방법을 적용한다. 번 행에 있는 학생의 좌표는 모두 이고, 행 안에서 정하는 좌표는 좌표이며, 비교하는 값은 이다.
이 방법으로 나오는 좌표는 모두 정수이고, 입력 제한에 따라 모든 학생이 매트 위에 놓인다.