trang chủ / đề bài / magiccol

Cột trụ ma thuật

Đề bài

Mô tả

Cho một lưới hình chữ nhật gồm n hàng và m cột. Một số ô của lưới có đặt cột trụ, các ô còn lại để trống.

Một tia sáng di chuyển theo đường thẳng trong lưới. Khi gặp một cột trụ bình thường, tia sáng xuyên qua mà không đổi hướng. Ta có thể dùng phép thuật để biến một cột trụ thành cột trụ ma thuật: khi tia sáng chạm vào một cột trụ ma thuật, tia sáng được phản xạ đồng thời ra cả bốn hướng (lên, xuống, trái, phải) từ ô đó.

Tia sáng xuất phát từ cạnh phải của ô nằm ở góc dưới bên phải, tức ô (n,m), và đi sang trái dọc theo hàng n. Cánh cửa nằm ở cạnh trái của ô ở góc trên bên trái, tức ô (1,1).

Hãy tìm số cột trụ ít nhất cần yểm phép để tia sáng ra được khỏi cánh cửa, hoặc cho biết điều đó là không thể.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên n và m.
  • n dòng tiếp theo, mỗi dòng gồm m ký tự mô tả một hàng của lưới. Ký tự . là ô trống, ký tự # là ô có cột trụ.

Dữ liệu ra

In ra một số nguyên duy nhất là số cột trụ ít nhất cần yểm phép, hoặc −1 nếu không có cách nào để tia sáng ra khỏi cửa.

Ràng buộc

  • 2≤n,m≤1000

Ví dụ

Input Output Giải thích
3 3
.#.
...
.#.
2 Yểm phép cho cả hai cột trụ, ở ô (1,2) và ô (3,2). Tia sáng đi sang trái dọc hàng 3, chạm cột trụ ma thuật ở (3,2) nên được phản xạ lên trên, đi dọc cột 2 tới (1,2), ở đó lại được phản xạ sang trái và thoát ra khỏi cửa.
4 3
##.
...
.#.
.#.
2 Chỉ cần yểm phép hai cột trụ ở (4,2) và (1,2). Tia sáng đi dọc hàng 4, phản xạ lên tại (4,2), rồi xuyên thẳng qua cột trụ bình thường ở (3,2) mà không đổi hướng, tới (1,2) thì phản xạ sang trái. Trên đường ra nó lại xuyên qua cột trụ bình thường ở (1,1) và thoát khỏi cửa.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0