벡터의 합

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

요약
N개의 2차원 벡터 중 둘을 골라 각 좌표의 부호를 선택적으로 바꿔 합의 크기를 최소로 만들고, 그 두 벡터와 적용한 연산 번호를 출력한다.
난이도

어려움10점 중 8점

유형
정렬, 기하, 완전 탐색, 수학
정답자
아직 제출이 없습니다

문제

2차원 벡터 NN개가 있다. 각 벡터에는 좌표에 −1-1을 곱하는 연산을 적용할 수 있다. 예를 들어 v=(x,y)v = (x, y)라면 다음 네 가지 중 하나로 변형할 수 있다.

  • 1: (x,y)(x, y)
  • 2: (−x,y)(-x, y)
  • 3: (x,−y)(x, -y)
  • 4: (−x,−y)(-x, -y)

NN개의 벡터 중 두 개 viv_i, vjv_j를 골라 ∣vi+vj∣|v_i + v_j|의 최솟값을 구하는 프로그램을 작성하시오. 두 벡터에는 위 연산을 적용해 네 가지 형태 중 하나로 변형할 수 있다.

입력

첫째 줄에 벡터의 개수 NN(2≤N≤100,0002 \le N \le 100{,}000)이 주어진다. 둘째 줄부터 NN개의 줄에 ii번째 벡터 viv_i의 좌표 xix_i, yiy_i(−10,000≤x,y≤10,000-10{,}000 \le x, y \le 10{,}000)가 한 줄에 하나씩 주어진다.

출력

첫째 줄에 네 개의 정수 ii, k1k_1, jj, k2k_2를 공백으로 구분해 출력한다. ii와 jj는 고른 벡터의 인덱스이고, k1k_1, k2k_2는 적용한 연산의 번호이다. 최솟값을 만드는 답이 여러 개라면 아무거나 출력한다.

힌트

두 벡터 v=(xv,yv)v = (x_v, y_v), u=(xu,yu)u = (x_u, y_u)의 합은 s=v+u=(xv+xu,yv+yu)s = v + u = (x_v + x_u, y_v + y_u)이다.

벡터 v=(x,y)v = (x, y)의 ∣v∣|v|는 x2+y2\sqrt{x^2 + y^2}이다.

예제2

  1. 예제 1

    입력
    5
    -7 -3
    9 0
    -8 6
    7 -8
    4 -5
    
    예상 출력
    3 2 4 2
    
  2. 예제 2

    입력
    5
    3 2
    -4 7
    -6 0
    -8 4
    5 1
    
    예상 출력
    3 4 5 4