구슬 미끄럼틀

공이 좌우 번갈아 달린 날개를 타고 굴러 내려갈 때, 중간에 끼지 않고 끝까지 도달하는 공 지름의 최댓값을 구한다.

어려움8기하이분 탐색시뮬레이션수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

어느 공장에서 아래 그림과 같은 구슬 미끄럼틀 장난감을 만들려고 한다. 나무 막대 두 개가 세로로 서 있고, 두 막대에 번갈아 붙은 날개가 그 사이에 걸쳐 있다. 가장 높은 날개에 강철 구슬을 놓으면 구슬은 중력을 받아 날개를 차례로 타고 내려가다가 장난감 밖으로 빠져나온다.

막대와 날개의 크기, 위치, 기울기를 담은 설계는 공장 주인이 이미 확정했고 수천 개가 생산에 들어갔다. 강철 구슬을 사는 일은 공장 관리자가 맡았다. 관리자는 수천 개를 주문하기 전에, 구슬이 중간에 걸리지 않고 끝까지 내려오는 최대 지름을 알고 싶다.


그림 1: 두 가지 예시. (a)에서는 구슬이 끝까지 내려오고, (b)에서는 구슬이 중간에 걸려 끝까지 내려오지 못한다.

장난감을 정면에서 보면 평면이다. 왼쪽 막대는 직선 x=0x = 0, 오른쪽 막대는 직선 x=Lx = L이고, 날개는 두께가 없는 선분이다. 구슬은 원이고, 막대와 날개에 닿을 수는 있지만 뚫고 지나갈 수는 없다. 장난감의 설계를 읽어 구슬이 중간에 걸리지 않고 밖으로 나오는 최대 지름을 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어지고, 파일 끝까지 읽어야 한다.

각 테스트 케이스의 첫째 줄에는 날개의 개수 NN이 주어진다. 둘째 줄에는 두 막대 사이의 거리 LL과 막대의 높이 HH가 주어진다. 왼쪽 막대는 XX축의 좌표 00에, 오른쪽 막대는 좌표 LL에 서 있다.

이어지는 NN개의 줄은 날개를 높은 것부터 낮은 것 순서로 하나씩 설명한다. 날개가 붙은 막대는 한 줄마다 번갈아 바뀐다. 가장 높은 날개(첫 번째로 주어지는 날개)는 끝이 왼쪽 막대에 붙어 있고, 두 번째로 높은 날개는 오른쪽 막대에 붙어 있다. 즉 홀수 번째 날개는 왼쪽 막대에, 짝수 번째 날개는 오른쪽 막대에 붙어 있다.

각 날개는 공백으로 구분된 세 정수 YiY_i, XfX_f, YfY_f로 주어진다. (Xf,Yf)(X_f, Y_f)는 날개가 끝나는 점의 좌표다. 홀수 번째 날개는 (0,Yi)(0, Y_i)에서 시작하고, 짝수 번째 날개는 (L,Yi)(L, Y_i)에서 시작한다.

모든 날개는 Yi>YfY_i > Y_f이므로 시작점에서 끝점으로 내려간다. 날개의 길이는 장난감의 너비보다 짧다. 연속한 두 날개 AABBYfAYiBY_{fA} \ge Y_{iB}를 만족한다. 즉 AA의 끝점은 BB의 시작점과 같거나 더 높다. 연속한 두 날개는 가로로 겹치므로 AA의 끝점에서 떨어진 구슬은 항상 BB 위에 떨어진다.

날개는 매우 얇아서 두께를 무시할 수 있고, 날개의 폭은 항상 구슬의 지름보다 크므로 구슬이 날개를 타고 내려갈 옆 공간은 항상 있다.

제한

  • 1N1031 \le N \le 10^3
  • 1L1031 \le L \le 10^3
  • 1H1031 \le H \le 10^3
  • 0<Xf<L0 < X_f < L
  • 0YiH0 \le Y_i \le H, 0YfH0 \le Y_f \le H, Yi>YfY_i > Y_f

출력

각 테스트 케이스마다 구슬이 장난감 전체를 통과할 수 있는 최대 지름을 소수점 아래 둘째 자리까지 반올림해 한 줄에 출력한다.