격자점 A와 B가 주어질 때, 선분 AC와 BC가 각각 다른 격자점을 포함하지 않고 삼각형 ABC 내부에 격자점이 없도록 하는 격자점 C를 K개 출력한다.
어려움8정수론기하수학완전 탐색아직 제출이 없습니다시간 제한1초메모리 제한512 MB평면 위 서로 다른 두 격자점 A와 B에 친구 두 명이 서 있다. 두 사람을 한 장에 담기 위해 다음 조건을 모두 만족하는 격자점 C를 고른다.
x좌표와 y좌표가 모두 정수인 점을 격자점이라고 한다.
사진은 한 장만 찍지 않으므로, 주어진 A와 B마다 조건을 만족하는 C를 K개 구한다. 조건을 만족하는 C는 무수히 많아서 답이 하나로 정해지지 않으므로, 그중 어느 K개를 출력할지는 출력에서 정한 규칙을 따른다.
첫 줄에 테스트 케이스의 개수 T가 주어진다. (1≤T≤1000)
다음 T개의 줄에 정수 다섯 개 Ax, Ay, Bx, By, K가 주어진다. A=(Ax,Ay), B=(Bx,By)이고 두 점은 서로 다르다. (−109≤Ax,Ay,Bx,By≤109, 0≤K, 모든 K의 합은 20000 이하)
각 테스트 케이스마다 점 C의 좌표를 "Cx Cy" 형식으로 한 줄에 하나씩 K줄 출력한다. K=0인 케이스에서는 아무것도 출력하지 않는다.
출력할 K개의 점은 다음 규칙으로 정한다. 위 조건을 모두 만족하는 격자점 C 가운데
s(C)=(Bx−Ax)(Cy−Ay)−(By−Ay)(Cx−Ax)>0
이면서
f(C)=(Cx−Ax)(Bx−Ax)+(Cy−Ay)(By−Ay)≥0
인 점만 남긴다. 남은 점을 f(C)가 작은 것부터 차례로 K개 출력한다.
남은 점은 무수히 많으므로 언제나 K개를 고를 수 있고, 남은 점의 f(C) 값은 서로 다르므로 출력은 하나로 정해진다. 이 규칙으로 고른 점의 좌표는 절댓값이 1014 이하이다.