만드는 중입니다

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

띠 행렬의 LU 분해

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

요약
삼중대각행렬을 대각 성분이 1인 하삼각행렬과 상삼각행렬의 곱으로 분해하고 분해가 불가능하면 -1을 출력합니다.
난이도

보통10점 중 5점

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

문제

N×NN \times N 행렬 AA가 주어진다. LU 분해는 A=LUA = LU 꼴의 곱으로 나누는 것이다. LL은 하삼각행렬, UU는 상삼각행렬이다.

  • 하삼각행렬은 i<ji < j일 때 Lij=0L_{ij} = 0인 행렬이다.
  • 상삼각행렬은 i>ji > j일 때 Uij=0U_{ij} = 0인 행렬이다.

이 문제에서는 띠의 폭이 1인 띠 행렬만 다룬다. 즉 AA는 주대각선과 바로 위아래 대각선에만 값이 있고, 나머지 자리는 모두 0이다.

A=[b1c10⋯0a2b2c2⋯⋮0⋱⋱⋱0⋮⋱an−1bn−1cn−10⋯0anbn]A = \begin{bmatrix} b_1 & c_1 & 0 & \cdots & 0 \\ a_2 & b_2 & c_2 & \cdots & \vdots \\ 0 & \ddots & \ddots & \ddots & 0 \\ \vdots & \ddots & a_{n-1} & b_{n-1} & c_{n-1} \\ 0 & \cdots & 0 & a_n & b_n \end{bmatrix}

LL의 대각 성분이 모두 1이 되도록 하는 LL과 UU를 구한다. 이런 LL과 UU는 존재하면 하나뿐이다.

입력

첫째 줄에 정사각 행렬의 크기 NN (1≤N≤10001 \le N \le 1000)이 주어진다. 다음 NN개의 줄에 행렬 AA의 성분이 한 줄에 NN개씩 순서대로 주어진다.

모든 성분은 절댓값이 1000 이하인 정수이고, ∣i−j∣≥2|i - j| \ge 2인 자리의 성분은 항상 0이다. 분해가 존재하는 입력에서는 LL과 UU의 모든 성분의 절댓값이 10610^6 이하임이 보장된다.

출력

분해가 존재하고 UU의 대각 성분이 모두 0이 아니면, 먼저 NN개의 줄에 LL을 출력하고 이어서 NN개의 줄에 UU를 출력한다. 각 줄에는 그 행의 성분 NN개를 공백 하나로 구분해 적는다.

각 성분은 정확한 값을 소수 넷째 자리에서 반올림해 소수 셋째 자리까지 출력한다. 반올림은 0에서 먼 쪽으로 한다. 예를 들어 0.06250.0625는 0.063, −0.0625-0.0625는 -0.063이 된다. 반올림한 값이 0이면 부호를 붙이지 않고 0.000으로 출력한다.

분해가 불가능하거나 UU의 대각 성분 중에 0이 있으면 첫째 줄에 -1만 출력한다.

예제8

  1. 예제 1

    입력
    3
    1 1 0
    1 0 1
    0 1 1
    
    예상 출력
    1.000 0.000 0.000
    1.000 1.000 0.000
    0.000 -1.000 1.000
    1.000 1.000 0.000
    0.000 -1.000 1.000
    0.000 0.000 2.000
    
  2. 예제 2

    입력
    1
    7
    
    예상 출력
    1.000
    7.000
    
  3. 예제 3

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

    입력
    2
    0 1
    1 2
    
    예상 출력
    -1
    
  5. 예제 5

    입력
    4
    1 -1000 0 0
    100 1000 1 0
    0 -1 2 3
    0 0 1 4
    
    예상 출력
    1.000 0.000 0.000 0.000
    100.000 1.000 0.000 0.000
    0.000 0.000 1.000 0.000
    0.000 0.000 0.500 1.000
    1.000 -1000.000 0.000 0.000
    0.000 101000.000 1.000 0.000
    0.000 0.000 2.000 3.000
    0.000 0.000 0.000 2.500
    
  6. 예제 6

    입력
    3
    16 0 0
    1 16 0
    0 -1 5
    
    예상 출력
    1.000 0.000 0.000
    0.063 1.000 0.000
    0.000 -0.063 1.000
    16.000 0.000 0.000
    0.000 16.000 0.000
    0.000 0.000 5.000
    
  7. 예제 7

    입력
    5
    1 1 0 0 0
    1 1 1 0 0
    0 1 1 1 0
    0 0 1 1 1
    0 0 0 1 1
    
    예상 출력
    -1
    
  8. 예제 8

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