만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

평면 늘리기

시간 제한10초메모리 제한1024 MB

요약
점 n개가 주어질 때, 각 배율 α마다 모든 점의 x좌표를 α배 한 뒤 두 점 사이의 최대 거리를 구합니다.
난이도

어려움10점 중 8점

유형
기하, 투 포인터, 정렬
정답자
아직 제출이 없습니다

문제

이고르는 기하학을 매우 좋아해서 nn개의 서로 다른 점으로 이루어진 집합 PP와 함께 평면을 샀다. ii번째 점은 (xi,yi)(x_i, y_i)에 있다.

이고르는 서로 가장 멀리 떨어진 두 점을 아주 쉽게 찾을 수 있었다. 싫증이 난 그는 실수 α1,α2,α3,…,αq\alpha_1, \alpha_2, \alpha_3, \ldots, \alpha_q를 qq개 골랐다. 각 αj\alpha_j에 대해, 모든 점의 xx좌표에 αj\alpha_j를 곱한 뒤 두 점 사이 거리의 최댓값을 구하려 한다. 형식적으로는 집합 (xi⋅αj,yi)(x_i \cdot \alpha_j, y_i)에서 가장 멀리 떨어진 두 점을 찾는 문제이다.

입력

첫 줄에 두 정수 tt와 gg가 주어진다 (1≤t≤250 0001 \le t \le 250\,000, 0≤g≤90 \le g \le 9). tt는 테스트 케이스의 수이고, gg는 테스트 케이스가 만족할 수 있는 추가 조건을 나타내는 그룹 번호이다. 이어서 tt개의 테스트 케이스가 주어진다.

각 테스트 케이스는 두 정수 nn과 qq (2≤n≤500 0002 \le n \le 500\,000, 1≤q≤500 0001 \le q \le 500\,000)로 시작한다. 각각 점의 수와 질의의 수이다. 다음 nn개 줄에는 점의 좌표 xix_i와 yiy_i (−109≤xi,yi≤109-10^9 \le x_i, y_i \le 10^9)가 주어진다. 한 테스트 케이스 안의 점들은 모두 서로 다르다. 다음 qq개 줄에는 각각 배율인 실수 αj\alpha_j (1≤αj≤1091 \le \alpha_j \le 10^9) 하나가 주어진다.

nin_i의 합을 NN, qiq_i의 합을 QQ라 하면 N,Q≤500 000N, Q \le 500\,000이 보장된다.

출력

각 테스트 케이스마다 qq개의 실수를 출력한다. 질의마다 답을 입력 순서대로 적는다. 정답을 bb, 출력한 답을 aa라 할 때 ∣a−b∣max⁡(b,1)≤10−6\frac{|a-b|}{\max(b,1)} \le 10^{-6}을 만족하면 정답으로 인정한다.

예제1

  1. 예제 1

    입력
    2 0
    5 2
    0 0
    1 1
    0 2
    -1 3
    0 4
    1
    2.5
    8 4
    0 0
    6 11
    7 13
    4 14
    0 15
    -4 14
    -7 13
    -6 11
    2
    1
    1.25
    1.5
    
    예상 출력
    4.000000
    5.385165
    28.000000
    15.000000
    17.500000
    21.000000