만드는 중입니다

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

나이트 다각형

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

요약
정수 p와 q가 주어질 때, 인접한 꼭짓점끼리 나이트의 한 번 이동 거리에 있고 넓이가 p/q인 단순 격자 다각형을 찾습니다. 그런 다각형이 없으면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
기하, 수학, 구현
정답자
아직 제출이 없습니다

문제

두 점 (x1,y1)(x_1, y_1)과 (x2,y2)(x_2, y_2)는 다음 조건 중 정확히 하나가 성립하면 나이트 이동 거리만큼 떨어져 있다고 한다.

  • ∣x1−x2∣=2|x_1 - x_2| = 2이고 ∣y1−y2∣=1|y_1 - y_2| = 1
  • ∣x1−x2∣=1|x_1 - x_2| = 1이고 ∣y1−y2∣=2|y_1 - y_2| = 2

이 정의는 체스에서 나이트가 움직이는 방식과 거의 같다. 예를 들어 아래 그림에는 나이트 이동 거리만큼 떨어진 점의 쌍이 세 개 있다.

정수 pp와 qq가 주어진다. 넓이가 p/qp/q이고, 인접한 꼭짓점끼리 모두 나이트 이동 거리만큼 떨어진 단순 격자 다각형을 찾아라. 그런 다각형이 없으면 없다고 밝힌다.

다각형이 단순하다는 것은 각 꼭짓점에 정확히 두 변이 닿아 있고, 두 변이 꼭짓점 외에서는 만나지 않는다는 뜻이다. 격자 다각형은 모든 꼭짓점의 좌표가 정수인 다각형이다.

입력

첫 줄에 테스트 케이스의 수 tt (1≤t≤101 \le t \le 10)가 주어진다. 각 테스트 케이스는 한 줄로 이루어지며, 원하는 넓이의 분자와 분모인 두 정수 pp와 qq (1≤p,q≤1041 \le p, q \le 10^4)가 주어진다.

출력

각 테스트 케이스마다 해가 없으면 정수 −1-1을 한 개 출력한다.

해가 있으면 첫 줄에 다각형의 꼭짓점 수 nn (3≤n≤1053 \le n \le 10^5)을 출력한다. 이어서 nn개의 줄에 꼭짓점의 좌표 xx와 yy (−109≤x,y≤109-10^9 \le x, y \le 10^9)를 한 줄에 하나씩 시계 방향 또는 반시계 방향 순서로 출력한다.

다각형은 단순해야 하고, 넓이는 pq\frac{p}{q}이어야 하며, 인접한 꼭짓점끼리 모두 나이트 이동 거리만큼 떨어져 있어야 한다. 해가 여러 개이면 그중 아무거나 출력한다.

힌트

첫 번째 테스트 케이스의 출력이 나타내는 다각형은 넓이가 183=6\frac{18}{3} = 6이며, 아래 그림과 같다.

세 번째 테스트 케이스의 출력이 나타내는 다각형은 넓이가 81=8\frac{8}{1} = 8이며, 아래 그림과 같다.

두 번째와 네 번째 테스트 케이스에는 유효한 다각형이 없음을 보일 수 있다.

예제1

  1. 예제 1

    입력
    4
    18 3
    1 2
    8 1
    20 3
    
    예상 출력
    6
    0 0
    2 1
    1 3
    0 1
    -1 3
    -2 1
    -1
    14
    -1 -2
    -3 -1
    -2 1
    -1 3
    0 1
    1 3
    2 1
    3 -1
    1 -2
    2 0
    1 2
    0 0
    -1 2
    -2 0
    -1