Mê cung vô hạn

Đề bài

Mô tả

Cho một mê cung hình chữ nhật kích thước n×m, mỗi ô là ô trống hoặc tường. Người ta lát kín cả mặt phẳng bằng các bản sao của mê cung này theo chu kỳ, tạo thành một mê cung vô hạn: ô (x,y) trên mặt phẳng (với x,y là số nguyên bất kỳ, kể cả số âm) là tường khi và chỉ khi ô (xmodn,ymodm) của mê cung gốc là tường. Ở đây amodb là số dư không âm của phép chia a cho b, các hàng của mê cung gốc được đánh số từ 0 đến n−1 và các cột từ 0 đến m−1.

Một cậu bé đứng ở ô xuất phát. Từ ô (x,y), cậu có thể đi sang một trong bốn ô (x,y−1), (x,y+1), (x−1,y), (x+1,y) nếu ô đó không phải tường.

Hỏi cậu bé có thể đi xa vô hạn khỏi vị trí xuất phát hay không, tức là với mọi khoảng cách D, cậu đều đến được một ô cách ô xuất phát hơn D.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên n và m.
  • n dòng tiếp theo, mỗi dòng chứa m ký tự mô tả mê cung gốc: # là tường, . là ô trống, S là ô xuất phát của cậu bé (cũng là ô trống).

Dữ liệu ra

In ra Yes nếu cậu bé có thể đi xa vô hạn, ngược lại in ra No.

Ràng buộc

  • 1≤n,m≤1500.
  • Ký tự S xuất hiện đúng một lần.

Ví dụ

Input Output Giải thích
5 4
##.#
##S#
#..#
#.##
#..#
Yes Cậu bé đi lên mãi theo đường đi lặp lại: lên, lên, trái, lên, lên, phải, lên. Mỗi lần lặp cậu sang được bản sao ngay phía trên.
5 4
##.#
##S#
#..#
..#.
#.##
No Đường đi lên bị chặn. Đường sang trái cũng không được: bản sao bên trái nhốt cậu bé lại.

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