높은 빌딩을 한 번에 뛰어넘기

시간 제한1초메모리 제한128 MB

요약
너비와 높이가 주어진 건물들의 스카이라인에서 모든 건물을 넘어가는, 지면에서 지면으로 이어지는 가장 낮은 포물선 궤적을 찾아 최고 높이를 소수 둘째 자리까지 반올림해 출력한다.
난이도

어려움10점 중 8점

유형
기하, 이분 탐색, 수학, 구현
정답자
아직 제출이 없습니다

문제

새다! 비행기다! 우리 쪽으로 날아온다!

가끔은 그렇게 보이지만, 슈퍼맨은 (비행기 없이는) 날 수 없다. 대신 그는 초인적인 도약으로, 특히 높은 빌딩 위를 뛰어넘는다. 언제 범인을 쫓아야 할지 알 수 없으므로 비행 경로를 미리 신고할 수 없고, 비행기와 부딪히지 않기 위해 매번의 도약을 가능한 한 지면에 가깝게 유지하려 한다.

도약은 지면에서 시작해 지면에서 끝나므로, 슈퍼맨의 궤적은 도약의 중점을 기준으로 좌우 대칭인 포물선이 된다. 아래 방향의 중력 가속도 aa와 초기 수직 속도 vv 아래에서 tt초 뒤의 높이는 d(t)=v t+12 a t2d(t) = v\,t + \tfrac{1}{2}\,a\,t^2이다. 도시의 스카이라인이 주어질 때, 모든 빌딩을 넘으면서 도달하는 최고 고도(도약 중 슈퍼맨이 올라가는 최대 높이)를 가장 작게 만들 수 있는 값을 구하라.

입력

입력은 하나 이상의 스카이라인으로 이루어지며, 각 스카이라인은 다음 형식으로 주어진다.

n
0 d1
h2 d2
...
h(n-1) d(n-1)
0 dn

도약은 지면에서 시작해 지면에서 끝나며, 가로 방향으로 총 d1+d2+⋯+dnd_1 + d_2 + \cdots + d_n 미터를 이동한다. ii번째 구간의 너비는 did_i이고, 첫 번째와 마지막 구간은 높이 00의 빈 지면이며, 그 사이의 각 구간 ii는 슈퍼맨이 그 너비 전체에 걸쳐 넘어야 하는 높이 hih_i의 빌딩이다. 높이와 너비는 정수가 아닐 수 있다. nn은 최대 100100이다. 입력이 끝날 때까지 스카이라인을 반복해서 처리한다.

출력

각 스카이라인에 대해, 모든 빌딩을 넘으면서 도달할 수 있는 최고 고도의 최솟값(넘기 위해 필요한 최대 높이의 최솟값)을 소수점 아래 둘째 자리까지 반올림하여 한 줄에 출력한다.

힌트

예제2

  1. 예제 1

    입력
    3
    0 5
    10 5
    0 5
    5
    0 10.5
    20 11.5
    25 10
    10 15
    0 7
    
    예상 출력
    11.25
    31.92
    
  2. 예제 2

    입력
    3
    0 10
    6 10
    0 10
    
    예상 출력
    6.75