물통
시간 제한1초메모리 제한128 MB
최대 4개의 가득 찬 용기에서 전체 붓기, 채우기, 버리기만 사용해 목표 물 분배에 도달할 수 있는지 판정하고 최소 이동 횟수를 구한다.
문제
개의 물통이 있고 (), 처음에는 모든 물통이 물로 가득 차 있다. 번째 물통의 용량은 정수 리터이며 를 만족한다.
다음 세 가지 동작을 할 수 있다.
- 한 물통의 물을 다른 물통에 전부 붓는다. 받는 물통에 그 물을 모두 담을 만큼 남은 공간이 충분할 때만 할 수 있다.
- 다른 물통의 물을 이용해 한 물통을 용량 끝까지 가득 채운다. (붓는 쪽에 받는 물통의 남은 공간보다 많은 물이 있을 때 쓰며, 받는 물통은 가득 차고 남은 물은 붓는 쪽에 그대로 남는다.)
- 한 물통의 물을 전부 배수구에 버린다.
각 물통의 용량과, 각 물통에 최종적으로 담기길 원하는 물의 양이 주어진다. 허용된 동작만으로 그 최종 상태에 도달할 수 있는지 판단하고, 도달할 수 있으면 필요한 최소 동작 횟수를, 그렇지 않으면 NIE를 출력하라.
입력
첫째 줄에 물통의 개수 이 주어진다 (). 둘째 줄에 개의 정수 이 공백 하나로 구분되어 주어지며, 는 번째 물통의 용량이다 (). 셋째 줄에 개의 정수 이 공백 하나로 구분되어 주어지며, 는 번째 물통에 최종적으로 담기길 원하는 물의 양이다 ().
출력
허용된 동작만으로는 원하는 최종 상태에 도달할 수 없으면 NIE라는 한 단어만 출력한다. 도달할 수 있으면 그 최종 상태에 이르는 최소 동작 횟수를 정수 하나로 출력한다.