다오는 크기가 인 격자판 위에서 카트를 타며 이동하고 있다. 격자판의 몇몇 칸에는 박스 모양의 장애물이 있어서 카트가 들어가거나 지나갈 수 없으며, 다오는 매번 위, 아래, 왼쪽, 오른쪽 중 한 방향을 정해 일정 거리만큼 이동할 수 있다.
구체적으로, 처음에 다오는 원하는 방향으로 카트를 한 칸씩 움직일 수 있다. 격자판의 몇몇 칸에는 아이템이 놓여 있는데, 만약 다오의 카트가 정확히 아이템이 놓인 칸에서 멈추게 되면, 한 번에 이동할 수 있는 최대 거리가 영구적으로 만큼 늘어나고 아이템은 격자판에서 사라진다. 즉, 지금까지 아이템을 개 먹었다면, 매번 원하는 방향으로 최대 칸 움직일 수 있다. 단, 이동 중에 장애물이 있는 칸을 통과하거나 격자판 밖으로 나갈 수는 없다.
예를 들어, 아래 그림에서 다오가 지금까지 개의 아이템을 먹었다고 하자. 아래와 오른쪽으로는 최대 칸 이동할 수 있으며, 왼쪽으로는 장애물에 가로막혀 최대 칸만 이동할 수 있다. 위로 칸 이상 이동하면 격자판을 벗어나게 되므로 위로는 이동할 수 없다.
현재 다오의 위치, 격자판에 놓인 장애물과 아이템의 정보, 그리고 다오가 가고자 하는 목적지의 위치가 주어지면, 여러분은 이동 횟수를 최소화하면서 다오가 목적지까지 가는 경로를 구해야 한다.
첫 줄에 격자판의 크기를 나타내는 두 정수 와 , 그리고 격자판에 놓인 아이템의 개수를 나타내는 정수 가 공백으로 구분되어 주어진다. ( )
이어지는 개의 줄에는 격자판의 상태를 나타내는 길이 의 문자열이 주어진다.
이 문자열은 문자 .
, #
, @
, S
, T
로만 이루어져 있으며,
각각 빈 칸, 장애물이 놓인 칸, 아이템이 놓인 칸, 다오의 시작 위치,
다오의 목적지를 의미한다.
개의 문자열 전체에서
문자 S
와 T
는 각각 정확히 개 주어지며,
문자 @
는 정확히 개 주어진다.
첫 줄에 다오의 이동 횟수 를 출력한다. 를 만족해야 한다.
그다음 줄부터 총 개의 줄에 걸쳐,
다오의 이동 방법을 나타내는 문자열을 출력한다.
이 문자열은 문자 와 양의 정수 로 이루어져 있어야 하며,
각각 이동 방향과 이동 거리를 의미한다.
는 문자 W
, S
, A
, D
중 하나여야 하며,
각각 위, 아래, 왼쪽, 오른쪽 방향을 의미하고,
는 다오의 이동 거리를 의미한다.
5 5 4 @...@ .###. .#S#. .#@.@ T####
5 S 1 D 2 W 3 A 4 S 4
이 문제는 풀이 소스 코드를 제출하지 않고, 각 테스트 케이스의 입력 데이터를 다운받아 알맞은 출력 파일을 만들어 출력 파일만을 제출하는 문제다.
문제 해결을 도와주는 시뮬레이터가 아래 미션에 대해 제공된다. 제공되는 시뮬레이터는 최신 버전의 크롬 브라우저에서 여는 것을 권장한다.
이 문제의 총점은 모든 미션의 점수의 합으로 계산된다. 각 미션의 점수를 계산하는 방법은 다음과 같다.
이때, 미션에 대한 참가자의 점수는 를 단위로 버림한 값이다. 즉, 는 미션에서 점을 받게 되는 이동 횟수의 하한, 는 미션에서 만점을 받기 위한 이동 횟수를 나타내는 상수이다.
단, 참가자의 출력이 올바르지 않은 경우 (출력 형식을 맞추지 않았거나, 제약 조건을 지키지 않는 등) 이다.
각 미션의 정보는 다음과 같다.
# | ||||||
---|---|---|---|---|---|---|
미션마다 만점을 받을 수 있는 출력이 존재함이 보장된다.