미래로 도킹
시간 제한8초메모리 제한512 MB
초기 거리와 속도, 여러 감속 모드가 주어질 때 매초 모드를 바꿀 수 있다고 보고 우주선이 정지선에 정확히 멈추는지, 선 앞에 멈추는지, 속도가 음수가 되는지, 선을 넘는지를 판정한다.
문제
오래전부터 우주선을 갖고 싶었는데, 어제 마침내 중고 우주선을 한 대 샀다! 우주선 운전에서 가장 어려운 일은 도킹 위치에 정확히 정지하는 것이라고 들었다. 물론 당신도 예외는 아니다. 열 번 남짓 실패한 끝에, 모든 도킹 과정을 수동으로 하는 것을 포기했다. 당신은 우주선을 정지시키는 데 도움이 되는 간단한 프로그램을 작성하기 시작했다.
먼저 어떻게든 우주선을 도크로 향하는 직선 경로에 수동으로 올려놓았다. 한계선까지의 거리를 [m], 도크를 향한 속도를 [m/s]라고 하자. 이제 감속 로켓을 켠다. 그러면 프로그램이 로켓을 제어해 우주선을 가장 좋은 위치에 정지시킨다.
당신의 우주선에는 개의 모드를 가진 감속 로켓이 장착되어 있다. 우주선이 모드 ()에 있을 때 감속도는 [m/s²]이다. 우주선을 다시 가속할 수는 없다. 가속 로켓은 너무 강력해서 도킹 중에는 사용할 수 없다. 또한 감속 로켓을 껐다 켤 수도 없다. 우주선이 중고라서, 로켓을 한 번 끄면 다시 켤 수 있을지 확실하지 않기 때문이다. 즉, 로켓을 끄는 시점이 우주선을 올바른 위치에 정지시키는 시점이다.
감속 로켓을 켠 뒤, 프로그램은 감속이 시작된 바로 그 순간부터 매초마다 모드를 바꾸거나 로켓을 정지시킬 수 있다. 와 가 주어졌을 때, 프로그램은 감속 계획을 세워야 한다. 프로그램의 목적과 우선순위는 다음과 같다.
- 우주선을 한계선에 정확히 정지시킨다. 이것이 가능하면 “perfect”를 출력한다.
- 불가능하면, 한계선에 최대한 가까운 위치에 정지시키되 한계선 앞에 정지시킨다. 이 경우 “good ”를 출력하는데, 는 한계선과 정지 위치 사이의 거리이다. 소수점 아래 세 자리까지 출력한다.
- 이것도 불가능하면, 속도가 음수가 되도록 감속하고 “try again”을 출력한다.
- 이 세 가지 경우가 모두 불가능하면, 우주선은 한계선을 넘어가는 것을 피할 수 없다. 이 경우 “crash”를 출력한다.
입력
입력의 첫 줄에는 테스트 케이스의 수 가 주어진다.
각 테스트 케이스는 감속 모드의 수를 나타내는 정수 ()으로 시작한다. 다음 줄에는 개의 양의 정수 ()이 주어지며, 각각 각 모드의 감속도를 나타낸다.
그다음 줄에는 정수 ()가 주어지고, 이어서 개의 줄이 주어진다. 각 줄에는 문제 설명에서 정의된 두 양의 정수 와 ()가 주어진다.
출력
각 와 의 쌍마다 결과를 한 줄에 출력한다. 테스트 케이스 사이에는 빈 줄을 하나 넣어야 한다.