에어로빅 자리 배치

시간 제한5초메모리 제한512 MB

요약
긴 변을 따라 정해진 탐욕 행 채우기 규칙으로 원 중심을 배치하고 좌표를 출력합니다.
난이도

쉬움10점 중 3점

유형
시뮬레이션, 그리디
정답자
아직 제출이 없습니다

문제

에어로빅 수업이 곧 시작한다. 강사는 학생들에게 매트 위에서 팔을 크게 휘둘러도 옆 사람과 부딪히지 않도록 자리를 잡으라고 말한다. 학생들이 자리를 정하지 못하고 계속 움직이기만 하자, 강사는 자리를 대신 계산해 달라고 부탁한다.

매트는 가로가 WW, 세로가 LL인 직사각형이다. ii번 학생은 팔이 닿는 거리 rir_i를 반지름으로 하는 원을 혼자 차지해야 한다. 두 원은 서로 닿아도 되지만 겹칠 수는 없다. 학생은 매트 위에 서므로 중심 좌표는 0≤x≤W0 \le x \le W와 0≤y≤L0 \le y \le L을 만족한다. 팔은 매트 밖으로 나가도 된다.

매트는 넉넉하다. 매트의 넓이는 모든 원의 넓이를 더한 값의 5배 이상이다. 조건을 만족하는 배치는 항상 있고, 출력할 배치는 출력 항목에서 하나로 정한다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스는 두 줄이다. 첫째 줄에는 학생 수 NN, 매트의 가로 WW, 매트의 세로 LL이 정수로 주어진다. 둘째 줄에는 학생마다 팔이 닿는 거리 r1,r2,…,rNr_1, r_2, \dots, r_N이 정수로 주어진다.

제한

  • 1≤T≤501 \le T \le 50
  • 1≤N≤101 \le N \le 10
  • 1≤W,L≤1091 \le W, L \le 10^9
  • 1≤ri≤1051 \le r_i \le 10^5
  • 5π(r12+r22+⋯+rN2)≤W⋅L5\pi(r_1^2 + r_2^2 + \dots + r_N^2) \le W \cdot L

출력

각 테스트 케이스마다 한 줄에 "Case #n: "을 출력하고, 이어서 ii번 학생의 위치 (xi,yi)(x_i, y_i)를 x1 y1 x2 y2 … xN yNx_1\ y_1\ x_2\ y_2\ \dots\ x_N\ y_N 순서로 정수 2N2N개를 공백 하나로 구분해 출력한다. nn은 1부터 시작하는 테스트 케이스 번호다. 아래 방법으로 만든 배치를 그대로 출력한다.

RR을 그 테스트 케이스에서 가장 큰 rir_i라고 하자. 학생은 입력에 주어진 순서대로 행에 채운다. 지금 행에 더 넣을 수 없는 학생이 나오면 그 학생부터 다음 행에 넣는다.

W≥LW \ge L이면 행은 xx축과 평행하다. jj를 0부터 세어 jj번 행에 있는 학생의 yy좌표는 모두 2Rj2Rj다. 행의 첫 학생은 x=0x = 0에 선다. 나머지 학생은 같은 행에서 바로 앞에 놓인 학생의 xx좌표를 pp, 그 학생의 팔 길이를 rpr_p, 자기 팔 길이를 rcr_c라고 할 때, p+rp+rcp + r_p + r_c가 WW 이하면 그 값을 xx좌표로 쓰고, WW보다 크면 다음 행의 x=0x = 0에 선다.

W<LW < L이면 두 축을 바꿔 같은 방법을 적용한다. jj번 행에 있는 학생의 xx좌표는 모두 2Rj2Rj이고, 행 안에서 정하는 좌표는 yy좌표이며, 비교하는 값은 LL이다.

이 방법으로 나오는 좌표는 모두 정수이고, 입력 제한에 따라 모든 학생이 매트 위에 놓인다.

예제1

  1. 예제 1

    입력
    2
    2 6 6
    1 1
    3 320 2
    4 3 2
    
    예상 출력
    Case #1: 0 0 2 0
    Case #2: 0 0 7 0 12 0