trang chủ / bài tập / palpaths

Đường đi đối xứng trên lưới

Đề bài

Mô tả

Cho một lưới chữ nhật gồm n hàng và m cột, mỗi ô được điền một chữ cái tiếng Anh thường. Hàng được đánh số từ 1 tới n từ trên xuống, cột được đánh số từ 1 tới m từ trái sang phải. Ô ở giao của hàng r và cột c được ký hiệu là (r,c).

Bạn xuất phát từ ô (1,1) và muốn đi đến ô (n,m). Tại mỗi bước, từ ô (r,c) bạn chỉ được di chuyển sang ô (r+1,c) hoặc (r,c+1) (không được ra ngoài lưới).

Một đường đi được gọi là đẹp nếu dãy chữ cái thu được khi ghi lại nhãn của các ô đi qua (kể cả ô đầu và ô cuối) tạo thành một xâu đối xứng (palindrome) — tức là đọc xuôi và đọc ngược cho cùng một xâu.

Hãy đếm số đường đi đẹp từ (1,1) đến (n,m). Vì kết quả có thể rất lớn, hãy in ra phần dư của nó khi chia cho 109+7.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm.
  • n dòng tiếp theo, mỗi dòng chứa một xâu độ dài m gồm các chữ cái tiếng Anh thường, mô tả lưới.

Dữ liệu ra

  • In ra một số nguyên duy nhất là số đường đi đẹp modulo 109+7.

Ràng buộc

  • 1n,m500.

Ví dụ

Input Output Giải thích
3 4
aaab
baaa
abba
3 3 đường đi mà xâu nhãn tạo thành palindrome.
5 2
ab
ab
cc
ba
ba
1 Chỉ có một đường đi đẹp duy nhất.
1 5
abbba
1 Lưới một hàng: xâu đã là palindrome nên có đúng 1 đường đi.
1 5
abbbb
0 Lưới một hàng nhưng xâu không phải palindrome — không có đường đi đẹp.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0