만드는 중입니다

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

Banach

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

요약
각 점에 벡터를 하나씩 대응시켜 이동 후 모든 점 쌍의 거리가 줄어들지 않게 하고, 거리 제곱의 합이 최대가 되는 대응을 찾습니다.
난이도

어려움10점 중 8점

유형
기하, 수학
정답자
아직 제출이 없습니다

문제

스테판, 데이비드, 펠릭스는 ACM 방식의 프로그래밍 대회를 준비하고 있다. 스테판이 다음 문제를 제안했다.

평면 위에 NN개의 점과 NN개의 이동 벡터가 주어진다. 각 점을 대응하는 벡터만큼 평행 이동했을 때, 모든 점 쌍 사이의 거리가 줄어들지 않도록 벡터와 점을 일대일로 대응시켜라.

데이비드는 이 문제를 빠르게 풀었고, 문제집에 넣기에는 너무 쉽다고 주장한다. 이를 설득하기 위해 펠릭스는 다음과 같이 수정했다. 가능한 해 중에서 이동 후 모든 점 쌍 사이 거리의 제곱합이 최대가 되는 해를 고른다.

데이비드는 여전히 이 문제가 쉽다고 생각한다. 그에게 동의하는가?

입력

첫째 줄에 점과 벡터의 개수 NN이 주어진다 (1≤N≤5001 \leq N \leq 500).

다음 NN개 줄에는 점의 좌표 pxipx_i, pyipy_i가 주어진다 (0≤∣pxi∣,∣pyi∣≤10 0000 \leq |px_i|, |py_i| \leq 10\,000).

이어서 NN개 줄에는 벡터 vxivx_i, vyivy_i가 주어진다 (0≤∣vxi∣,∣vyi∣≤10 0000 \leq |vx_i|, |vy_i| \leq 10\,000).

출력

모든 점 쌍 사이의 거리가 줄어들지 않는 대응이 존재하면 첫째 줄에 Yes를 출력한다. 둘째 줄에는 ii번째 점에 대응하는 벡터의 번호를 1부터 NN까지의 서로 다른 정수 NN개로 출력한다.

답은 얻어지는 모든 점 쌍 거리의 제곱합이 최대여야 한다. 최댓값을 내는 해가 여러 개라면 그중 아무거나 출력한다.

그런 대응이 없으면 한 줄에 No를 출력한다.

힌트

첫 번째 예제에서 대응은 "1 2"와 "2 1" 두 가지뿐이다. 두 경우 모두 모든 점 쌍 사이의 거리가 줄어들지 않는다. 거리 제곱합은 첫 번째가 9, 두 번째가 25이므로 정답은 "2 1"뿐이다.

두 번째 예제에서도 대응은 두 가지뿐이다. 두 경우 모두 거리가 줄어들지 않고 거리 제곱합이 0이므로 어느 답이든 맞다.

예제3

  1. 예제 1

    입력
    2
    0 0
    1 0
    2 0
    -2 0
    
    예상 출력
    Yes
    2 1
    
  2. 예제 2

    입력
    2
    2 2
    2 2
    -1 -1
    -1 -1
    
    예상 출력
    Yes
    1 2
    
  3. 예제 3

    입력
    3
    -2 -3
    3 1
    -3 -3
    -3 5
    -2 -4
    4 -1
    
    예상 출력
    Yes
    2 3 1