아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

새 트랙

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

요약
정해진 공식에 따라 x, y 좌표를 정하고, 교차점 수 k를 만족하도록 y좌표 순열을 구성해 축에 평행한 폴리라인을 출력하는 문제다.
난이도

어려움10점 중 9점

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

문제

게르 킬케는 포뮬러-Y 경주에 쓸 트랙을 설계하고, 이번에 새 트랙을 만들려고 한다. 트랙을 놓을 평면에 직교좌표계를 잡는데, x축은 오른쪽, y축은 위쪽을 향한다. 트랙은 다음 조건을 모두 만족해야 한다.

  • 트랙은 좌표축과 평행한 선분 nn개로 이루어진 꺾은선이다.
  • 꺾은선의 한쪽 끝은 출발점, 반대쪽 끝은 도착점이고, 두 점은 서로 다르다.
  • 모든 선분 끝점의 두 좌표는 30003000 이하의 양의 정수다.
  • 모든 선분의 길이는 0이 아니다.
  • 출발점에서 도착점으로 따라갈 때, 한 선분이 끝나고 다음 선분이 시작하는 지점마다 시계 방향으로 90도 꺾는다.
  • 어떤 선분의 끝점도 다른 선분 위에 놓이지 않는다. 다만 이웃한 두 선분은 끝점 하나를 공유한다. 특히 서로 다른 두 선분이 길이가 0이 아닌 부분을 공유하는 일은 없다.

교차점은 이웃하지 않은 두 선분에 동시에 속하는 점이다. 게르는 선분이 nn개이고 교차점이 정확히 kk개인 트랙을 원한다. 이런 트랙은 0≤k≤n2(n2−1)/20 \le k \le n_2(n_2 - 1)/2일 때만 존재하고(n2=⌊n/2⌋n_2 = \lfloor n/2 \rfloor), 게르는 언제나 이 범위에서 kk를 고른다.

조건을 만족하는 트랙은 여러 개이므로, 출력 부분의 규칙으로 답을 하나로 정한다. 그 트랙을 구하라.

입력

첫째 줄에 테스트 케이스의 개수 tt가 주어진다 (1≤t≤1041 \le t \le 10^4). 다음 tt개 줄에는 각각 두 정수 nn과 kk가 주어진다 (1≤n≤10001 \le n \le 1000, 0≤k≤n2(n2−1)/20 \le k \le n_2(n_2 - 1)/2, n2=⌊n/2⌋n_2 = \lfloor n/2 \rfloor). nn은 트랙을 이루는 선분의 개수, kk는 필요한 교차점의 개수다. 모든 테스트 케이스의 nn의 합은 10410^4을 넘지 않는다.

출력

각 테스트 케이스마다 트랙의 꼭짓점 n+1n + 1개를 출발점부터 도착점까지 한 줄에 하나씩 출력한다. 각 줄에는 꼭짓점의 x좌표와 y좌표를 공백으로 구분해 적는다. 테스트 케이스는 입력 순서대로 사이에 아무것도 넣지 않고 이어서 출력한다.

출력할 트랙은 아래 규칙으로 만든 트랙이다. H=⌈n/2⌉H = \lceil n/2 \rceil, V=⌊n/2⌋V = \lfloor n/2 \rfloor이라 하자.

x0,x1,…,xHx_0, x_1, \dots, x_H은 짝수 ii에 대해 xi=1+i/2x_i = 1 + i/2, 홀수 ii에 대해 xi=3000−(i−1)/2x_i = 3000 - (i - 1)/2이다.

y0,y1,…,yVy_0, y_1, \dots, y_V은 kk에서 정해진다. m≤Vm \le V이면서 m(m−1)/2≤km(m - 1)/2 \le k인 가장 큰 정수를 mm이라 하고, r=k−m(m−1)/2r = k - m(m - 1)/2이라 하자. 1≤q≤m1 \le q \le m이면 cq=q−1c_q = q - 1, m+1≤Vm + 1 \le V이면 cm+1=rc_{m+1} = r, m+1<q≤Vm + 1 < q \le V이면 cq=0c_q = 0이다. 이때 y0,y1,…,yVy_0, y_1, \dots, y_V은 1,2,…,V+11, 2, \dots, V + 1의 순열 중 11 이상 VV 이하인 모든 qq에 대해 아래 두 조건을 만족하는 순열이고, 그런 순열은 정확히 하나다.

  • qq가 홀수면 yq<yq−1y_q < y_{q-1}, qq가 짝수면 yq>yq−1y_q > y_{q-1}이다.
  • y0,y1,…,yq−2y_0, y_1, \dots, y_{q-2} 중 정확히 cqc_q개가 yq−1y_{q-1}과 yqy_q 사이에 양 끝을 빼고 놓인다.

트랙의 2j2j번 꼭짓점은 (xj,yj)(x_j, y_j), 2j+12j + 1번 꼭짓점은 (xj+1,yj)(x_{j+1}, y_j)이다. 00번 꼭짓점부터 nn번 꼭짓점까지 순서대로 출력한다.

이 트랙은 문제의 조건을 모두 만족하고, 교차점은 정확히 kk개다.

예제2

  1. 예제 1

    입력
    2
    4 1
    3 0
    
    예상 출력
    1 2
    3000 2
    3000 1
    2 1
    2 3
    1 2
    3000 2
    3000 1
    2 1
    
  2. 예제 2

    입력
    3
    1 0
    2 0
    3 0
    
    예상 출력
    1 1
    3000 1
    1 2
    3000 2
    3000 1
    1 2
    3000 2
    3000 1
    2 1