삼중대각행렬을 대각 성분이 1인 하삼각행렬과 상삼각행렬의 곱으로 분해하고 분해가 불가능하면 -1을 출력합니다.
보통5행렬수학구현아직 제출이 없습니다시간 제한3초메모리 제한128 MBN×N 행렬 A가 주어진다. LU 분해는 A=LU 꼴의 곱으로 나누는 것이다. L은 하삼각행렬, U는 상삼각행렬이다.
이 문제에서는 띠의 폭이 1인 띠 행렬만 다룬다. 즉 A는 주대각선과 바로 위아래 대각선에만 값이 있고, 나머지 자리는 모두 0이다.
A=b1a20⋮0c1b2⋱⋱⋯0c2⋱an−10⋯⋯⋱bn−1an0⋮0cn−1bn
L의 대각 성분이 모두 1이 되도록 하는 L과 U를 구한다. 이런 L과 U는 존재하면 하나뿐이다.
첫째 줄에 정사각 행렬의 크기 N (1≤N≤1000)이 주어진다. 다음 N개의 줄에 행렬 A의 성분이 한 줄에 N개씩 순서대로 주어진다.
모든 성분은 절댓값이 1000 이하인 정수이고, ∣i−j∣≥2인 자리의 성분은 항상 0이다. 분해가 존재하는 입력에서는 L과 U의 모든 성분의 절댓값이 106 이하임이 보장된다.
분해가 존재하고 U의 대각 성분이 모두 0이 아니면, 먼저 N개의 줄에 L을 출력하고 이어서 N개의 줄에 U를 출력한다. 각 줄에는 그 행의 성분 N개를 공백 하나로 구분해 적는다.
각 성분은 정확한 값을 소수 넷째 자리에서 반올림해 소수 셋째 자리까지 출력한다. 반올림은 0에서 먼 쪽으로 한다. 예를 들어 0.0625는 0.063, −0.0625는 -0.063이 된다. 반올림한 값이 0이면 부호를 붙이지 않고 0.000으로 출력한다.
분해가 불가능하거나 U의 대각 성분 중에 0이 있으면 첫째 줄에 -1만 출력한다.