알고리즘을 오래 붙잡아 본 사람이라면 안다. 입력 벡터 x와 출력 벡터 y를 가진 선형 시스템은 행렬 M 하나로 나타낼 수 있다. M의 j번째 열에는 j번 입력만 1이고 나머지 입력이 모두 0일 때 나오는 출력값이 들어 있다. 시스템이 선형이므로 임의의 입력 조합에 대한 출력은 M의 열을 선형결합해서 얻는다.
y=Mx
행렬 M과 출력 벡터 y가 주어진다. 이 출력을 만들어내는 입력 x를 구하라. M은 m×n 행렬, y는 크기가 m인 열벡터이고, 구해야 하는 x는 크기가 n인 열벡터로 0이 아닌 성분이 정확히 세 개다. m=3, n=4인 경우를 풀어 쓰면 다음 식을 만족하는 x를 찾는 문제다.
y1y2y3=m11m21m31m12m22m32m13m23m33m14m24m34x1x2x3x4
입력의 개수 n이 출력의 개수 m보다 큰 경우도 다뤄야 한다. 이때 M은 미결정 시스템이라 같은 y를 만드는 x가 여럿 존재하지만, 0이 아닌 성분이 정확히 세 개인 x는 하나뿐이다.
첫째 줄에 행렬 M의 행 개수 m이, 둘째 줄에 열 개수 n이 주어진다. 이어지는 m개의 줄에는 M의 각 행이 공백으로 구분된 실수 n개로 주어진다. 그다음 m개의 줄에는 출력 벡터 y의 성분이 한 줄에 하나씩 주어진다.
3≤m≤30, 3≤n≤30이고, 조건을 만족하는 x는 항상 유일하게 존재한다. 입력 하나에는 테스트 케이스가 하나만 들어 있다.
0이 아닌 세 성분의 번호를 오름차순으로, 한 줄에 하나씩 다음 형식으로 출력한다.
input i = v
i는 1 이상 n 이하의 정수이고, v는 그 입력의 값을 소수점 아래 셋째 자리에서 반올림해 소수점 아래 둘째 자리까지 적은 값이다. 반올림 방향이 흔들릴 만큼 경계에 가까운 값은 정답에 나오지 않는다.
정답 x를 M에 곱하면 y의 각 성분이 상대오차 0.01% 안에서 복원된다. 0이 아닌 성분의 위치로 가능한 후보는 (3n)가지뿐이므로, 후보마다 그 세 열로 최소제곱해를 구한 다음 잔차가 0에 가까운 후보를 고르면 된다. 세 번호는 정답과 정확히 일치해야 한다.