Banach
시간 제한3초메모리 제한512 MB
각 점에 벡터를 하나씩 대응시켜 이동 후 모든 점 쌍의 거리가 줄어들지 않게 하고, 거리 제곱의 합이 최대가 되는 대응을 찾습니다.
문제
스테판, 데이비드, 펠릭스는 ACM 방식의 프로그래밍 대회를 준비하고 있다. 스테판이 다음 문제를 제안했다.
평면 위에 개의 점과 개의 이동 벡터가 주어진다. 각 점을 대응하는 벡터만큼 평행 이동했을 때, 모든 점 쌍 사이의 거리가 줄어들지 않도록 벡터와 점을 일대일로 대응시켜라.
데이비드는 이 문제를 빠르게 풀었고, 문제집에 넣기에는 너무 쉽다고 주장한다. 이를 설득하기 위해 펠릭스는 다음과 같이 수정했다. 가능한 해 중에서 이동 후 모든 점 쌍 사이 거리의 제곱합이 최대가 되는 해를 고른다.
데이비드는 여전히 이 문제가 쉽다고 생각한다. 그에게 동의하는가?
입력
첫째 줄에 점과 벡터의 개수 이 주어진다 ().
다음 개 줄에는 점의 좌표 , 가 주어진다 ().
이어서 개 줄에는 벡터 , 가 주어진다 ().
출력
모든 점 쌍 사이의 거리가 줄어들지 않는 대응이 존재하면 첫째 줄에 Yes를 출력한다. 둘째 줄에는 번째 점에 대응하는 벡터의 번호를 1부터 까지의 서로 다른 정수 개로 출력한다.
답은 얻어지는 모든 점 쌍 거리의 제곱합이 최대여야 한다. 최댓값을 내는 해가 여러 개라면 그중 아무거나 출력한다.
그런 대응이 없으면 한 줄에 No를 출력한다.
힌트
첫 번째 예제에서 대응은 "1 2"와 "2 1" 두 가지뿐이다. 두 경우 모두 모든 점 쌍 사이의 거리가 줄어들지 않는다. 거리 제곱합은 첫 번째가 9, 두 번째가 25이므로 정답은 "2 1"뿐이다.
두 번째 예제에서도 대응은 두 가지뿐이다. 두 경우 모두 거리가 줄어들지 않고 거리 제곱합이 0이므로 어느 답이든 맞다.