비전 프로그램
시간 제한1초메모리 제한1024 MB
두 검은 픽셀 사이의 맨해튼 거리가 K인지 판별하는 NOT, AND, OR, XOR 회로를 만드는 절차를 구현합니다.
문제
로봇의 카메라가 사진을 찍을 때마다 그 이미지는 흑백 이미지로 로봇의 메모리에 저장된다. 각 이미지는 격자이며, 행은 0번부터 번까지, 열은 0번부터 번까지 번호가 매겨져 있다. 모든 이미지에는 검은 픽셀이 정확히 두 개 있고, 나머지 픽셀은 모두 흰색이다.
로봇은 간단한 명령어로 이루어진 프로그램으로 각 이미지를 처리할 수 있다. 주어진 , 와 양의 정수 에 대해, 임의의 이미지에서 두 검은 픽셀 사이의 거리가 정확히 인지 판별하는 프로그램을 만들어 내는 절차를 작성하라. 행 , 열 의 픽셀과 행 , 열 의 픽셀 사이의 거리는 이다. 여기서 는 이면 , 이면 와 같다.
로봇의 메모리는 0번부터 번호가 붙은 충분히 큰 셀의 배열이다. 각 셀은 0 또는 1을 저장할 수 있으며, 한 번 설정된 값은 바뀌지 않는다. 이미지는 행 단위로 셀 0번부터 번까지에 저장된다. 첫 번째 행은 셀 0번부터 번까지에, 마지막 행은 셀 번부터 번까지에 저장된다. 행 , 열 의 픽셀이 검은색이면 셀 의 값은 1이고, 그렇지 않으면 0이다.
로봇의 프로그램은 0부터 연속된 번호가 붙은 명령어의 나열이다. 명령어는 하나씩 차례로 실행된다. 각 명령어는 하나 이상의 셀 값(명령어의 입력)을 읽고, 0 또는 1의 값 하나(명령어의 출력)를 만든다. 번 명령어의 출력은 셀 번에 저장된다. 번 명령어의 입력으로는 셀 0번부터 번까지만 쓸 수 있으며, 이 셀들은 픽셀이거나 이전 명령어의 출력이다.
명령어는 네 종류가 있다.
NOT: 입력이 하나뿐이다. 입력이 0이면 출력은 1이고, 그렇지 않으면 0이다.AND: 입력이 하나 이상이다. 모든 입력이 1일 때에만 출력이 1이다.OR: 입력이 하나 이상이다. 입력 중 하나 이상이 1일 때에만 출력이 1이다.XOR: 입력이 하나 이상이다. 1인 입력의 개수가 홀수일 때에만 출력이 1이다.
마지막 명령어의 출력은 두 검은 픽셀 사이의 거리가 정확히 이면 1이어야 하고, 그렇지 않으면 0이어야 한다.