Mê cung 2D

Đề bài

Mô tả

Một mê cung có dạng hình chữ nhật kích thước 2×n, chia thành các ô vuông đơn vị. Mỗi ô hoặc là ô trống, hoặc là ô có vật cản.

Trong một đơn vị thời gian, một người có thể di chuyển từ một ô trống sang một ô trống kề cạnh với nó.

Các ô ở hàng thứ nhất được đánh số từ 1 đến n theo thứ tự từ trái sang phải, các ô ở hàng thứ hai được đánh số từ n+1 đến 2n cũng theo thứ tự từ trái sang phải.

Cho m truy vấn, mỗi truy vấn gồm hai ô trống v và u. Với mỗi truy vấn, hãy tìm thời gian ít nhất để đi từ ô v đến ô u, hoặc cho biết không thể đi được.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên n và m: chiều rộng của mê cung và số truy vấn.
  • Hai dòng tiếp theo mô tả mê cung, mỗi dòng gồm n ký tự, mỗi ký tự là . (ô trống) hoặc X (vật cản).
  • m dòng tiếp theo, dòng thứ i chứa hai số nguyên vi và ui mô tả truy vấn thứ i. Đảm bảo cả hai ô này đều là ô trống.

Dữ liệu ra

In ra m dòng. Dòng thứ i chứa độ dài đường đi ngắn nhất từ ô vi đến ô ui, hoặc −1 nếu không thể đi từ ô này tới ô kia.

Ràng buộc

  • 1≤n≤2·105
  • 1≤m≤2·105
  • 1≤vi,ui≤2n

Ví dụ

Input Output Giải thích
10 3
X...X..X..
..X...X..X
11 7
7 18
18 10
9
-1
3
Ô 11 là ô (hàng 2, cột 1), ô 7 là ô (hàng 1, cột 7). Đường đi ngắn nhất phải đổi hàng ba lần (tại các cột 2, 4, 6) nên tốn 6+3=9 bước. Với truy vấn thứ hai, cột 7 chỉ trống ở hàng 2 còn cột 8 chỉ trống ở hàng 1, hai cột này nằm kề nhau nên không thể chuyển hàng, đáp án là −1.
4 7
.X..
...X
5 1
1 3
7 7
1 4
6 1
4 7
5 7
1
4
0
5
2
2
2
Ô 1 và ô 5 nằm cùng cột 1 và đều trống nên cách nhau 1 bước. Đi từ ô 1 đến ô 3 phải vòng xuống hàng 2 vì ô (hàng 1, cột 2) có vật cản: 1→5→6→7→3, tốn 4 bước. Truy vấn thứ ba có hai ô trùng nhau nên đáp án là 0.

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