만드는 중입니다

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

격자점 C 찾기

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

요약
격자점 A와 B가 주어질 때, 선분 AC와 BC가 각각 다른 격자점을 포함하지 않고 삼각형 ABC 내부에 격자점이 없도록 하는 격자점 C를 K개 출력한다.
난이도

어려움10점 중 8점

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

문제

평면 위 서로 다른 두 격자점 AA와 BB에 친구 두 명이 서 있다. 두 사람을 한 장에 담기 위해 다음 조건을 모두 만족하는 격자점 CC를 고른다.

  1. CC는 AA와 다르고 BB와도 다르다.
  2. 선분 ACAC 위에는 두 끝점 말고 다른 격자점이 없다.
  3. 선분 BCBC 위에는 두 끝점 말고 다른 격자점이 없다.
  4. 삼각형 ABCABC의 넓이가 00보다 크다. 즉 CC는 AA와 BB를 지나는 직선 위에 있지 않다.
  5. 삼각형 ABCABC의 내부에는 격자점이 없다.

xx좌표와 yy좌표가 모두 정수인 점을 격자점이라고 한다.

사진은 한 장만 찍지 않으므로, 주어진 AA와 BB마다 조건을 만족하는 CC를 KK개 구한다. 조건을 만족하는 CC는 무수히 많아서 답이 하나로 정해지지 않으므로, 그중 어느 KK개를 출력할지는 출력에서 정한 규칙을 따른다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤10001 \le T \le 1000)

다음 TT개의 줄에 정수 다섯 개 AxA_x, AyA_y, BxB_x, ByB_y, KK가 주어진다. A=(Ax,Ay)A = (A_x, A_y), B=(Bx,By)B = (B_x, B_y)이고 두 점은 서로 다르다. (−109≤Ax,Ay,Bx,By≤109-10^9 \le A_x, A_y, B_x, B_y \le 10^9, 0≤K0 \le K, 모든 KK의 합은 2000020000 이하)

출력

각 테스트 케이스마다 점 CC의 좌표를 "CxC_x CyC_y" 형식으로 한 줄에 하나씩 KK줄 출력한다. K=0K = 0인 케이스에서는 아무것도 출력하지 않는다.

출력할 KK개의 점은 다음 규칙으로 정한다. 위 조건을 모두 만족하는 격자점 CC 가운데

s(C)=(Bx−Ax)(Cy−Ay)−(By−Ay)(Cx−Ax)>0s(C) = (B_x - A_x)(C_y - A_y) - (B_y - A_y)(C_x - A_x) > 0

이면서

f(C)=(Cx−Ax)(Bx−Ax)+(Cy−Ay)(By−Ay)≥0f(C) = (C_x - A_x)(B_x - A_x) + (C_y - A_y)(B_y - A_y) \ge 0

인 점만 남긴다. 남은 점을 f(C)f(C)가 작은 것부터 차례로 KK개 출력한다.

남은 점은 무수히 많으므로 언제나 KK개를 고를 수 있고, 남은 점의 f(C)f(C) 값은 서로 다르므로 출력은 하나로 정해진다. 이 규칙으로 고른 점의 좌표는 절댓값이 101410^{14} 이하이다.

예제2

  1. 예제 1

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

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