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