정해진 공식에 따라 x, y 좌표를 정하고, 교차점 수 k를 만족하도록 y좌표 순열을 구성해 축에 평행한 폴리라인을 출력하는 문제다.
어려움9구현조합론기하수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB게르 킬케는 포뮬러-Y 경주에 쓸 트랙을 설계하고, 이번에 새 트랙을 만들려고 한다. 트랙을 놓을 평면에 직교좌표계를 잡는데, x축은 오른쪽, y축은 위쪽을 향한다. 트랙은 다음 조건을 모두 만족해야 한다.
교차점은 이웃하지 않은 두 선분에 동시에 속하는 점이다. 게르는 선분이 n개이고 교차점이 정확히 k개인 트랙을 원한다. 이런 트랙은 0≤k≤n2(n2−1)/2일 때만 존재하고(n2=⌊n/2⌋), 게르는 언제나 이 범위에서 k를 고른다.
조건을 만족하는 트랙은 여러 개이므로, 출력 부분의 규칙으로 답을 하나로 정한다. 그 트랙을 구하라.
첫째 줄에 테스트 케이스의 개수 t가 주어진다 (1≤t≤104). 다음 t개 줄에는 각각 두 정수 n과 k가 주어진다 (1≤n≤1000, 0≤k≤n2(n2−1)/2, n2=⌊n/2⌋). n은 트랙을 이루는 선분의 개수, k는 필요한 교차점의 개수다. 모든 테스트 케이스의 n의 합은 104을 넘지 않는다.
각 테스트 케이스마다 트랙의 꼭짓점 n+1개를 출발점부터 도착점까지 한 줄에 하나씩 출력한다. 각 줄에는 꼭짓점의 x좌표와 y좌표를 공백으로 구분해 적는다. 테스트 케이스는 입력 순서대로 사이에 아무것도 넣지 않고 이어서 출력한다.
출력할 트랙은 아래 규칙으로 만든 트랙이다. H=⌈n/2⌉, V=⌊n/2⌋이라 하자.
x0,x1,…,xH은 짝수 i에 대해 xi=1+i/2, 홀수 i에 대해 xi=3000−(i−1)/2이다.
y0,y1,…,yV은 k에서 정해진다. m≤V이면서 m(m−1)/2≤k인 가장 큰 정수를 m이라 하고, r=k−m(m−1)/2이라 하자. 1≤q≤m이면 cq=q−1, m+1≤V이면 cm+1=r, m+1<q≤V이면 cq=0이다. 이때 y0,y1,…,yV은 1,2,…,V+1의 순열 중 1 이상 V 이하인 모든 q에 대해 아래 두 조건을 만족하는 순열이고, 그런 순열은 정확히 하나다.
트랙의 2j번 꼭짓점은 (xj,yj), 2j+1번 꼭짓점은 (xj+1,yj)이다. 0번 꼭짓점부터 n번 꼭짓점까지 순서대로 출력한다.
이 트랙은 문제의 조건을 모두 만족하고, 교차점은 정확히 k개다.