Bạn đã tìm thấy con đường xuyên qua khu rừng và bây giờ lên kế hoạch đi dọc theo nó. Tuy nhiên, ngay trước khi bạn bắt đầu cuộc hành trình, mặt đất biến thành dung nham.
Bạn xoay sở để xới tung cái cây gần nhất (những cái cây không thể giải thích được), nhưng bây giờ bạn phải đối mặt với một vấn đề: làm thế nào bạn có thể ra khỏi rừng khi sàn nham thạch? Câu trả lời đánh vào bạn như một ý tưởng hay cho một thử thách lập trình - bạn có thể sử dụng móc vật lộn ma thuật của mình (được làm từ một mảnh ca nô trước đó) để đu qua cây và cành cây!
Tuy nhiên, bạn không chắc chắn những cây và nhánh bạn cần phải đu lên để đến đó. May mắn thay, bạn có kỹ năng lập trình của mình, vì vậy bạn quyết định vẽ một chương trình trên cánh tay để cho bạn biết những cây nào sẽ đu lên. Tuy nhiên, không có nhiều diện tích bề mặt trên cánh tay của bạn, vì vậy bạn phải làm cho chương trình càng nhỏ càng tốt.
Chúng ta có thể đại diện cho một khu rừng cách sử dụng một n
bằng m
mảng. Các ký tự sau sẽ tạo thành mảng:
T
: Một cái cây. Bạn có thể hạ cánh ở đây. Bạn không thể sử dụng móc vật lộn của bạn trên này. Bạn có thể lướt qua cái này.P
: Chức năng giống nhưT
. Bạn bắt đầu ở đây.Q
: Chức năng giống nhưT
. Đây là mục tiêu.+
: Một chi nhánh. Bạn không thể hạ cánh ở đây. Bạn có thể sử dụng móc vật lộn của bạn trên này. Bạn có thể lướt qua cái này.*
: Một con nhện ăn thịt người. Nếu bạn hạ cánh ở đây, bạn chết. Nếu bạn sử dụng móc vật lộn của bạn trên này, bạn sẽ chết. Nếu bạn vượt qua điều này, bạn sẽ chết.-
: Mặt đất thông thường, nói cách khác, dung nham. Bạn không thể hạ cánh ở đây. Bạn không thể sử dụng móc vật lộn của bạn trên này. Bạn có thể lướt qua cái này. Tất cả các khu vực bên ngoài của mảng đã cho là loại này.
Đây là một ví dụ về một khu rừng có thể trông như thế nào:
y
----T---+------12
---------------11
----T---+---T--10
---------------9
T-+-T-+-T------8
---------------7
------------+--6
----+----------5
+-------+------4
---------------3
----P---+-*-Q--2
---------------1
T-+-T-+-T------0
012345678911111
x 01234
Tôi sẽ đề cập đến tọa độ với ký hiệu (x,y)
, như được hiển thị trên các trục.
Bạn bắt đầu từ P
và phải làm theo cách của bạn Q
. Để làm điều này, bạn xoay từ cây này T
sang cây khác T
bằng cành cây +
. Bạn có thể gắn móc vật lộn của mình vào bất kỳ nhánh nào trực giao với bạn - nghĩa là một nhánh ở cùng vị trí x hoặc vị trí y mà bạn đang ở. Ví dụ: nếu bạn ở vị trí (4,8)
trong rừng ví dụ, bạn có thể đính kèm móc vật lộn của mình vào vị trí (2,8)
, (6,8)
hoặc (4,5)
. Bạn có thể gắn cái này ngay cả khi có cây hoặc các nhánh khác giữa bạn và nhánh.
Khi bạn gắn móc vật lộn của mình lên một nhánh, bạn sẽ di chuyển một khoảng cách theo hướng của nhánh bằng hai lần khoảng cách giữa vị trí ban đầu của bạn và nhánh. Nói cách khác, vị trí cuối cùng của bạn sẽ có cùng khoảng cách với chi nhánh với vị trí bắt đầu của bạn, chỉ ở phía đối diện. Một định nghĩa chính thức hơn về cách thức hoạt động của phong trào dưới đây. Một chỉ số của v
là vị trí cuối cùng, u
là vị trí ban đầu và b
là vị trí của chi nhánh.
Lưu ý rằng nếu có một con nhện giữa vị trí ban đầu và vị trí cuối cùng của bạn, bạn không thể đến đó. Ví dụ, trong khu rừng ví dụ, việc xoay từ (4,2)
đến (12,2)
là không thể vì bạn sẽ chạy vào con nhện tại (10,2)
.
Mục tiêu là, bằng cách sử dụng phương pháp đu dây này qua các nhánh, để đi từ điểm này P
đến điểm khác Q
trong số ít dao động nhất có thể. Chẳng hạn, trong rừng ví dụ, con đường ngắn nhất là:
- Từ
(4,2)
để(4,8)
sử dụng(4,5)
- Từ
(4,8)
để(0,8)
sử dụng(2,8)
- Từ
(0,8)
để(0,0)
sử dụng(0,4)
- Từ
(0,0)
để(4,0)
sử dụng(2,0)
- Từ
(4,0)
để(4,10)
sử dụng(4,5)
- Từ
(4,10)
để(12,10)
sử dụng(8,10)
- Từ
(12,10)
để(12,2)
sử dụng(12,6)
Đầu vào
Đầu vào là từ bất kỳ phương thức nào thuận tiện (STDIN, đối số dòng lệnh raw_input()
, v.v.), ngoại trừ nó có thể không được khởi tạo trước như một biến. Đầu vào bắt đầu bằng hai số nguyên được phân tách bằng dấu phẩy n
và m
biểu thị kích thước của bảng, sau đó là khoảng trắng và sau đó là rừng dưới dạng một chuỗi dài. Ví dụ, rừng ví dụ như một đầu vào sẽ trông như thế này:
15,13 ----T---+-------------------------T---+---T-----------------T-+-T-+-T---------------------------------+------+----------+-------+-------------------------P---+-*-Q-----------------T-+-T-+-T------
Đầu ra
Xuất ra một danh sách các bộ dữ liệu được phân tách bằng dấu phẩy cho biết tọa độ của các nhánh mà bạn phải xoay tới. Ví dụ, đối với đầu vào trên, đầu ra sẽ là:
4,5 2,8 0,4 2,0 4,5 8,10 12,6
Bạn có thể nhận thấy rằng đây không phải là con đường ngắn nhất xuyên qua rừng - thực sự, đi (8,8)
, xuống (8,0)
, sang trái (4,0)
và tiếp tục như bình thường từ đó có cùng một số lượng đu. Trong những trường hợp này, chương trình của bạn có thể xuất một trong hai đường dẫn ngắn nhất. Vì vậy, đầu ra:
4,5 6,8 8,4 6,0 4,5 8,10 12,6
cũng được cho phép. Đây là môn đánh gôn , vì vậy bài dự thi có số byte ngắn nhất sẽ thắng. Nếu bạn có câu hỏi hoặc giải thích của tôi không rõ ràng, hãy hỏi trong các ý kiến.
15,13
vì mảng có kích thước 13 x 15.