아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

미래로 도킹

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

요약
초기 거리와 속도, 여러 감속 모드가 주어질 때 매초 모드를 바꿀 수 있다고 보고 우주선이 정지선에 정확히 멈추는지, 선 앞에 멈추는지, 속도가 음수가 되는지, 선을 넘는지를 판정한다.
난이도

보통10점 중 7점

유형
동적 계획법, 시뮬레이션, 수학, 그리디
정답자
아직 제출이 없습니다

문제

오래전부터 우주선을 갖고 싶었는데, 어제 마침내 중고 우주선을 한 대 샀다! 우주선 운전에서 가장 어려운 일은 도킹 위치에 정확히 정지하는 것이라고 들었다. 물론 당신도 예외는 아니다. 열 번 남짓 실패한 끝에, 모든 도킹 과정을 수동으로 하는 것을 포기했다. 당신은 우주선을 정지시키는 데 도움이 되는 간단한 프로그램을 작성하기 시작했다.

먼저 어떻게든 우주선을 도크로 향하는 직선 경로에 수동으로 올려놓았다. 한계선까지의 거리를 xx[m], 도크를 향한 속도를 vv[m/s]라고 하자. 이제 감속 로켓을 켠다. 그러면 프로그램이 로켓을 제어해 우주선을 가장 좋은 위치에 정지시킨다.

당신의 우주선에는 nn개의 모드를 가진 감속 로켓이 장착되어 있다. 우주선이 모드 ii(0≤i<n0 \le i < n)에 있을 때 감속도는 aia_i[m/s²]이다. 우주선을 다시 가속할 수는 없다. 가속 로켓은 너무 강력해서 도킹 중에는 사용할 수 없다. 또한 감속 로켓을 껐다 켤 수도 없다. 우주선이 중고라서, 로켓을 한 번 끄면 다시 켤 수 있을지 확실하지 않기 때문이다. 즉, 로켓을 끄는 시점이 우주선을 올바른 위치에 정지시키는 시점이다.

감속 로켓을 켠 뒤, 프로그램은 감속이 시작된 바로 그 순간부터 매초마다 모드를 바꾸거나 로켓을 정지시킬 수 있다. xx와 vv가 주어졌을 때, 프로그램은 감속 계획을 세워야 한다. 프로그램의 목적과 우선순위는 다음과 같다.

  1. 우주선을 한계선에 정확히 정지시킨다. 이것이 가능하면 “perfect”를 출력한다.
  2. 불가능하면, 한계선에 최대한 가까운 위치에 정지시키되 한계선 앞에 정지시킨다. 이 경우 “good dd”를 출력하는데, dd는 한계선과 정지 위치 사이의 거리이다. 소수점 아래 세 자리까지 출력한다.
  3. 이것도 불가능하면, 속도가 음수가 되도록 감속하고 “try again”을 출력한다.
  4. 이 세 가지 경우가 모두 불가능하면, 우주선은 한계선을 넘어가는 것을 피할 수 없다. 이 경우 “crash”를 출력한다.

입력

입력의 첫 줄에는 테스트 케이스의 수 cc가 주어진다.

각 테스트 케이스는 감속 모드의 수를 나타내는 정수 nn(1≤n≤101 \le n \le 10)으로 시작한다. 다음 줄에는 nn개의 양의 정수 a0,…,an−1a_0, \dots, a_{n-1}(1≤ai≤1001 \le a_i \le 100)이 주어지며, 각각 각 모드의 감속도를 나타낸다.

그다음 줄에는 정수 qq(1≤q≤201 \le q \le 20)가 주어지고, 이어서 qq개의 줄이 주어진다. 각 줄에는 문제 설명에서 정의된 두 양의 정수 xx와 vv(1≤x,v≤1001 \le x, v \le 100)가 주어진다.

출력

각 xx와 vv의 쌍마다 결과를 한 줄에 출력한다. 테스트 케이스 사이에는 빈 줄을 하나 넣어야 한다.

예제1

  1. 예제 1

    입력
    1
    3
    2 4 6
    4
    10 100
    2 3
    10 6
    7 6
    
    예상 출력
    crash
    try again
    good 1.000
    perfect