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

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

Mission Possible

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

요약
직사각형 안에 서로 겹치지 않는 원형 센서 50개 이하가 있을 때, 시작점에서 목표점까지 직사각형을 벗어나지 않고 어떤 센서 원 내부도 지나지 않는 꺾은선 경로의 경유점을 1000개 이하로 출력한다.
난이도

어려움10점 중 8점

유형
기하, 그래프, BFS
정답자
아직 제출이 없습니다

문제

정부 비밀 요원 Allen은 마피아의 작전에 관한 중요한 정보를 알아내기 위해 마피아의 비밀 기지에 잠입하는 임무를 맡았다.

비밀 기지는 직교 좌표계에서 (xL,yL)(x_L, y_L), (xL,yR)(x_L, y_R), (xR,yL)(x_R, y_L), (xR,yR)(x_R, y_R)로 둘러싸인 직사각형이며, 여기서 xL<xRx_L < x_R이고 yL<yRy_L < y_R이다. 비밀 기지 안에는 NN개의 센서가 설치되어 있다. ii번째 센서는 (xi,yi)(x_i, y_i)에 위치하고 유효 감지 반경 rir_i를 가지며, (xi,yi)(x_i, y_i)로부터 거리가 rir_i보다 엄격히 작은 사람을 감지할 수 있다. 즉, ii번째 센서는 (xi,yi)(x_i, y_i)와 (xa,ya)(x_a, y_a) 사이의 유클리드 거리가 rir_i보다 엄격히 작은 경우에만 위치 (xa,ya)(x_a, y_a)에 있는 사람을 감지한다. 또한 임의의 두 센서 ii와 jj 사이의 유클리드 거리는 ri+rjr_i + r_j보다 엄격히 크다는 것이 알려져 있다. 두 점 (xa,ya)(x_a, y_a)와 (xb,yb)(x_b, y_b) 사이의 유클리드 거리는 ∣xa−xb∣2+∣ya−yb∣2\sqrt{|x_a - x_b|^2 + |y_a - y_b|^2}이다.

Allen은 위치 (xs,ys)(x_s, y_s)에서 잠입 임무를 시작하고, 목표는 (xt,yt)(x_t, y_t)에 있다. Allen은 직선으로 매우 빠르게 달릴 수 있지만, 달리는 궤적을 바꾸려면 발을 디뎌야 하므로 추가 시간이 필요하다. 빠른 주자이지만 달리는 동안 어떤 센서에도 감지되지 않아야 한다. 즉, 달리는 궤적 위의 어떤 점도 센서의 유효 감지 반경 안에 엄격히 들어가서는 안 된다.

P={(xp1,yp1),…,(xp∣P∣,yp∣P∣)}P = \{(x_{p1}, y_{p1}), \ldots, (x_{p|P|}, y_{p|P|})\}를 Allen이 달리는 궤적을 바꾸는 위치의 집합이라고 하자. 그러면 PP를 사용한 Allen의 달리는 궤적은 (xs,ys)→(xp1,yp1)→⋯→(xp∣P∣,yp∣P∣)→(xt,yt)(x_s, y_s) \to (x_{p1}, y_{p1}) \to \cdots \to (x_{p|P|}, y_{p|P|}) \to (x_t, y_t)이며, 여기서 (xa,ya)→(xb,yb)(x_a, y_a) \to (x_b, y_b)는 Allen이 (xa,ya)(x_a, y_a)에서 (xb,yb)(x_b, y_b)까지 직선으로 달린다는 것을 의미한다. 집합 PP는 PP를 사용했을 때 Allen이 어떤 센서에도 감지되지 않고 비밀 기지 밖으로 나가지 않으면 실행 가능하다. 단, Allen은 비밀 기지 둘레를 따라 달릴 수 있다. PP의 원소 (xp,yp)(x_p, y_p)의 xpx_p와 ypy_p는 정수일 필요가 없으며 실수일 수 있다.

이 문제에서 여러분의 임무는 1000개 이하의 점을 포함하는 실행 가능한 PP를 하나 찾는 것이다.

입력

입력은 다섯 정수 NN xLx_L yLy_L xRx_R yRy_R을 포함하는 한 줄로 시작한다 (0≤N≤500 \le N \le 50; 0≤xL<xR≤10000 \le x_L < x_R \le 1000; 0≤yL<yR≤10000 \le y_L < y_R \le 1000). 이는 각각 센서의 개수와 비밀 기지 (xL,yL,xR,yR)(x_L, y_L, x_R, y_R)를 나타낸다. 다음 줄에는 두 정수 xsx_s ysy_s가 주어진다 (xL<xs<xRx_L < x_s < x_R; yL<ys<yRy_L < y_s < y_R). 이는 Allen의 시작 위치를 나타낸다. 다음 줄에는 두 정수 xtx_t yty_t가 주어진다 (xL<xt<xRx_L < x_t < x_R; yL<yt<yRy_L < y_t < y_R). 이는 Allen의 목표 위치를 나타낸다. xs≠xtx_s \ne x_t 또는 ys≠yty_s \ne y_t임이 보장된다. 다음 NN개의 줄 각각에는 세 정수 xix_i yiy_i rir_i가 주어진다 (xL<xi−ri<xi+ri<xRx_L < x_i - r_i < x_i + r_i < x_R; yL<yi−ri<yi+ri<yRy_L < y_i - r_i < y_i + r_i < y_R; 1≤ri≤10001 \le r_i \le 1000). 이는 (xi,yi)(x_i, y_i)에 위치한 유효 감지 반경 rir_i의 센서를 나타낸다. 임의의 두 센서 ii와 jj 사이의 유클리드 거리는 ri+rjr_i + r_j보다 크다는 것이 보장된다. 또한 (xs,ys)(x_s, y_s)와 (xt,yt)(x_t, y_t)에서 임의의 센서 ii까지의 유클리드 거리는 rir_i보다 크다는 것이 보장된다.

출력

실행 가능한 PP의 크기를 나타내는 정수를 한 줄에 출력한다. 다음 ∣P∣|P|개의 줄 각각에는 두 실수를 공백 하나로 구분하여 출력한다. jj번째 줄에는 PP의 jj번째 점 (xj,yj)(x_j, y_j)를 나타내는 xjx_j yjy_j를 출력한다. 1000개 이하의 점을 포함하는 실행 가능한 PP를 아무거나 출력해도 된다.

출력이 부동 소수점이므로 ϵ=10−6\epsilon = 10^{-6}을 사용하여 출력을 검증한다. Q1=(xs,ys)Q_1 = (x_s, y_s), 모든 1≤j≤∣P∣1 \le j \le |P|에 대해 Qj+1=PjQ_{j+1} = P_j, Q∣P∣+2=(xt,yt)Q_{|P|+2} = (x_t, y_t)라고 하자. 그러면 PP는 1000개 이하의 점을 포함하고 다음 조건을 모두 만족할 때에만 올바른 것으로 간주된다.

  • 모든 1≤k≤∣P∣1 \le k \le |P|에 대해 xL−ϵ≤xpk≤xR+ϵx_L - \epsilon \le x_{pk} \le x_R + \epsilon이고 yL−ϵ≤ypk≤yR+ϵy_L - \epsilon \le y_{pk} \le y_R + \epsilon이다 (Allen이 비밀 기지 밖으로 나가지 않는다).
  • 모든 1≤k<∣Q∣1 \le k < |Q|에 대해 SkS_k를 QkQ_k와 Qk+1Q_{k+1}을 연결하는 선분이라고 하자 (Allen이 직선으로 달린다). 모든 1≤i≤N1 \le i \le N에 대해 (xk,i,yk,i)(x_{k,i}, y_{k,i})를 SkS_k 위에서 ii번째 센서의 위치 (xi,yi)(x_i, y_i)에 가장 가까운 점이라고 하자. dk,id_{k,i}를 (xk,i,yk,i)(x_{k,i}, y_{k,i})와 (xi,yi)(x_i, y_i) 사이의 유클리드 거리라고 하자. 그러면 ri≤dk,i+ϵr_i \le d_{k,i} + \epsilon을 만족해야 한다 (Allen이 어떤 센서에도 감지되지 않는다).
  • QQ의 모든 점은 서로 다르다. 두 점 (xa,ya)(x_a, y_a)와 (xb,yb)(x_b, y_b)는 ∣xa−xb∣>ϵ|x_a - x_b| > \epsilon 또는 ∣ya−yb∣>ϵ|y_a - y_b| > \epsilon일 때에만 서로 다른 것으로 간주된다.

예제2

  1. 예제 1

    입력
    3 2 2 50 26
    4 14
    48 14
    15 13 7
    36 16 6
    46 18 3
    
    예상 출력
    2
    13.25 23.1234567
    36.591003 7.1
    
  2. 예제 2

    입력
    1 0 0 1000 1000
    100 501
    900 501
    500 251 250
    
    예상 출력
    0