구슬 발사기
시간 제한1초메모리 제한1024 MB
발사기마다 45도 회전 비용이 주어질 때, 발사기 s에서 발사한 구슬이 발사기 e에 도달하도록 회전 비용의 합을 최소로 만드는 경로를 구한다.
문제
좌표 평면 위에 개의 구슬 발사기가 있다. 발사기에서 발사된 구슬은 발사기를 만나기 전까지 무한히 이동한다. 구슬이 이동 중에 발사기를 만나면 발사기가 바라보는 방향으로 다시 발사되며, 발사기를 방문하지 않고 지나칠 수는 없다. 구슬 발사기는 북, 북동, 동, 남동, 남, 남서, 서, 북서 이렇게 가지 방향을 바라볼 수 있다. 또한 발사기의 방향을 시계방향으로 원하는 만큼 회전시킬 수 있는데, 발사기 를 도 회전하기 위해 필요한 비용은 이다. 발사기는 최대 한 번 구슬을 발사할 수 있다. 따라서 한 번 사용된 발사기에 구슬이 방문한다면 더 이상 구슬이 이동하지 않고 그 발사기에 멈춘다.
발사기의 방향을 적절히 회전하여, 구슬을 발사기 에서 발사기 까지 최소 비용으로 도달하게 하려고 한다. 이 때 최소 비용과 어느 발사기를 거쳐서 이동했는지 구하는 프로그램을 작성하시오.
입력
첫 번째 줄에 정수 , , 이 주어진다. ()
다음 개의 줄에 걸쳐 발사기 의 정보 , , , 가 공백으로 분리되어 주어진다.
- 와 는 각각 발사기 의 좌표와 좌표이다. ()
- 는 발사기 를 회전하는데 필요한 비용이다. ()
- 는 발사기 가 초기에 바라보고 있는 방향이다. 알파벳 대문자
N,NE,E,SE,S,SW,W,NW중 하나이며 각각 북, 북동, 동, 남동, 남, 남서, 서, 북서 방향을 의미한다.
서로 다른 두 발사기가 같은 좌표에 존재하지 않으며, 모든 에 대하여 , , 는 정수이다.
출력
첫 번째 줄에 최소 비용을 출력한다.
두 번째 줄에 발사기 와 발사기 를 포함하여, 이동한 발사기의 번호를 출력한다. 만약 최소 비용으로 이동할 수 있는 경로가 여러 가지라면 아무거나 출력한다.
만약 발사기 까지 도달하는 것이 불가능하면, 첫 번째 줄에 을 출력한 뒤 종료한다.
힌트
동쪽이 좌표가 증가하는 방향, 북쪽이 좌표가 증가하는 방향이다.