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

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

실베스터 구성법

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

요약
실베스터 이중화 규칙으로 만든 아다마르 행렬에서 왼쪽 위 좌표로 지정된 작은 부분 행렬을 출력한다.
난이도

보통10점 중 7점

유형
분할 정복, 재귀, 비트 연산, 수학
정답자
아직 제출이 없습니다

문제

nn차 아다마르 행렬(Hadamard matrix)은 원소가 11과 −1-1로만 이루어진 n×nn \times n 행렬 HnH_n으로, HnHnT=nInH_n H_n^T = n I_n을 만족한다. 여기서 InI_n은 n×nn \times n 단위행렬이다. 아다마르 행렬의 주목할 만한 성질은, 모든 원소가 [−1,1][-1, 1] 범위에 있는 n×nn \times n 행렬 가운데 행렬식이 가질 수 있는 최댓값을 달성한다는 것이다. 아다마르 행렬은 오류 정정 부호와 계량 설계(weighing design) 등에 응용된다.

실베스터 구성법(Sylvester construction)은 HnH_n으로부터 크기가 2n2n인 아다마르 행렬을 만드는 방법이다. H2nH_{2n}은 다음과 같이 구성한다.

H2n=(HnHnHn−Hn)H_{2n} = \begin{pmatrix} H_n & H_n \\ H_n & -H_n \end{pmatrix}

예를 들어 다음과 같이 이어진다.

H1=(1),H2=(111−1)H_1 = \begin{pmatrix} 1 \end{pmatrix}, \qquad H_2 = \begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix}

이 문제에서는 위 방법으로 만든 아다마르 행렬의 일부분을 출력해야 한다.

입력

입력의 첫 번째 수는 이어지는 테스트 케이스의 개수이다. 각 테스트 케이스는 다섯 개의 정수 nn, xx, yy, ww, hh로 주어진다. nn은 22의 거듭제곱이며 1≤n≤2621 \le n \le 2^{62}이다. (x,y)(x, y)는 출력할 부분 행렬의 왼쪽 위 모서리로, xx는 열, yy는 행을 나타낸다. ww와 hh는 각각 부분 행렬의 너비와 높이이다. 좌표는 00부터 시작하므로 0≤x,y<n0 \le x, y < n이다. 부분 행렬은 항상 전체 행렬 안에 완전히 들어가며, 0<w,h≤200 < w, h \le 20이다. 테스트 케이스는 최대 10001000개이다.

출력

각 테스트 케이스마다 요청된 부분 행렬을 출력한다. 한 행의 원소들은 공백 하나로 구분한다. 연속한 테스트 케이스의 출력 사이에는 빈 줄을 하나 넣는다.

예제3

  1. 예제 1

    입력
    3
    2 0 0 2 2
    4 1 1 3 3
    268435456 12345 67890 11 12
    
    예상 출력
    1 1
    1 -1
    
    -1 1 -1
    1 -1 -1
    -1 -1 1
    
    1 -1 -1 1 1 -1 -1 1 1 -1 -1
    -1 -1 1 1 -1 -1 1 1 -1 -1 1
    1 1 1 -1 -1 -1 -1 1 1 1 1
    -1 1 -1 -1 1 -1 1 1 -1 1 -1
    1 -1 -1 -1 -1 1 1 1 1 -1 -1
    -1 -1 1 -1 1 1 -1 1 -1 -1 1
    -1 -1 -1 -1 -1 -1 -1 1 1 1 1
    1 -1 1 -1 1 -1 1 1 -1 1 -1
    -1 1 1 -1 -1 1 1 1 1 -1 -1
    1 1 -1 -1 1 1 -1 1 -1 -1 1
    -1 -1 -1 1 1 1 1 1 1 1 1
    1 -1 1 1 -1 1 -1 1 -1 1 -1
    
  2. 예제 2

    입력
    1
    1 0 0 1 1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1
    4 0 0 4 4
    
    예상 출력
    1 1 1 1
    1 -1 1 -1
    1 1 -1 -1
    1 -1 -1 1