N개의 점이 주어질 때, 한 점을 A+B-C로 옮기는 규칙을 정해진 절차에 따라 적용해 모든 점을 제1사분면으로 보내는 이동 열을 만들거나, 모든 점이 한 직선 위에 있으면 불가능을 판정하는 문제다.
어려움8기하구현수학정수론아직 제출이 없습니다시간 제한1초메모리 제한64 MB최근 "평행사변형"이라는 컴퓨터 게임이 인기를 끌고 있다. 게임을 시작하면 컴퓨터가 화면에 점 N개를 그린다. 각 점의 좌표는 −10 이상 10 이하의 정수이다.
게임에서 할 수 있는 동작은 한 가지뿐이다. 한 직선 위에 있지 않은 세 점 A, B, C를 고른 뒤 점 C 대신 점 D를 그린다. D는 ACBD가 선분 AB를 한 대각선으로 하는 평행사변형이 되게 하는 점이다. 이런 점 D는 항상 존재하고 유일하며, 좌표로 쓰면 D=A+B−C이다.
처음에는 모든 점의 좌표가 서로 다르지만, 게임 도중에는 두 개 이상의 점이 같은 좌표에 놓여도 된다. 새로 만들어지는 점의 좌표는 절댓값이 109 이하여야 한다.
게임의 목표는 동작을 여러 번 해서 모든 점을 제1사분면으로 옮기는 것이다. 정확히 말하면 게임이 끝났을 때 모든 점의 두 좌표가 음이 아니어야 한다.
동작을 2500번 이하로 해서 모든 점을 제1사분면으로 옮기는 방법을 구하거나, 그런 방법이 없다고 판정하라. 방법은 여러 가지일 수 있으므로 이 문제에서는 출력 절에 정한 규칙이 만드는 동작만 정답으로 인정한다.
첫째 줄에 점의 개수 N이 주어진다. (3≤N≤400)
다음 N개 줄 중 i번째 줄에는 i번 점의 좌표 Xi, Yi가 주어진다. (−10≤Xi,Yi≤10) 처음에 좌표가 같은 두 점은 없다.
아래에서 점의 좌표는 벡터로 다루고, Pi는 i번 점의 현재 좌표이다.
모든 점의 두 좌표가 이미 음이 아니면 0을 출력한다. 그렇지 않고 모든 점이 한 직선 위에 있으면 어떤 동작도 할 수 없으므로 -1을 출력한다.
나머지 경우에는 첫째 줄에 동작의 수 M을 출력하고, 다음 M개 줄에 동작을 한 줄에 하나씩 서로 다른 세 번호 A B C로 출력한다. 이 동작은 C번 점을 PA+PB−PC로 옮기고, A번 점과 B번 점은 그대로 둔다. 동작은 다음 규칙을 그대로 따라 만든다.
I J K, I K J, J K I, J I K, K I J, K J I를 이 순서대로 하는 것이다. 블록 하나는 세 점을 3(PI−PK)만큼 평행이동하고, 각 번호의 점은 자기 자리의 평행이동된 위치로 간다.a b c를 한 번 한다. (a,b)는 (p,q), (p,r), (q,r) 중 점 c와 한 직선 위에 있지 않은 첫 번째 쌍이다. 옮겨진 점 c의 두 좌표는 음이 아니다.이 규칙이 만드는 동작은 항상 2500개 이하이고, 모든 좌표의 절댓값은 109 이하로 유지된다.