Duyên hải Bắc Bộ 2024 - 11 - Mê cung ngoặc

Xem dạng PDF

Gửi bài giải

Điểm: 60,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 1G
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Pascal, PyPy, Python, Scratch, TEXT

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài

Một mê cung được mô tả bằng bảng chữ hình chữ nhật kích thước ~m \times n~. Các hàng của bảng được đánh số từ 1 đến ~m~ từ trên xuống dưới, các cột của bảng được đánh số từ 1 đến ~n~ từ trái qua phải. Ô nằm trên giao của hàng ~i~ và cột ~j~ được gọi là ô ~(i, j)~. Mỗi ô của lưới chứa một kí tự ngoặc mở '(' hoặc ngoặc đóng ')'.

Người chơi sẽ xuất phát từ ô ~(1, 1)~, quay hướng tới phía ô ~(1, n)~ và di chuyển trên bảng. Việc di chuyển phải tuân thủ các quy tắc được mô tả trên hình trên, cụ thể: từ ô đang đứng, căn cứ vào hướng đang hướng tới được chỉ ra bởi mũi tên $\Rightarrow$, thực hiện bước di chuyển sang ô kề cạnh đang hướng tới, hoặc sang ô kề cạnh nằm bên phải (các hướng có thể di chuyển được chỉ ra bởi các mũi tên $\to$). Mỗi ô chỉ được đi qua nhiều nhất một lần. Người chơi có thể dừng di chuyển tại một ô nào đó để kết thúc trò chơi.

Khi kết thúc trò chơi, người chơi nhận được một xâu kí tự ~T~ gồm các kí tự trong các ô trên đường đi được xếp liên tiếp nhau. Người chơi giành chiến thắng nếu xâu ~T~ là một biểu thức ngoặc đúng bậc ~k~.

Nhắc lại, định nghĩa biểu thức ngoặc đúng và bậc của biểu thức ngoặc:

  • Biểu thức rỗng là biểu thức ngoặc đúng và có bậc bằng 0,
  • Nếu ~A~ là biểu thức ngoặc đúng có bậc bằng ~k~ thì ~(A)~ cũng là một biểu thức ngoặc đúng có bậc bằng ~k + 1~,
  • Nếu ~A~ và ~B~ là hai biểu thức ngoặc đúng và có bậc tương ứng là ~k_1~ và ~k_2~ thì ~AB~ cũng là một biểu thức ngoặc đúng có bậc bằng ~\max(k_1, k_2)~.

Ví dụ, '()(())' là một biểu thức ngoặc đúng có bậc bằng 2 còn '(())((()))' là một biểu thức ngoặc đúng và có bậc bằng 3.

Yêu cầu: Cho bảng chữ và số nguyên dương ~k~, đếm số lượng đường đi khác nhau giúp người chơi giành chiến thắng. Hai đường đi được gọi là khác nhau nếu tồn tại một ô thuộc đường đi này nhưng không thuộc đường đi kia.

Input

  • Dòng đầu tiên ghi ba số nguyên dương ~m, n, k~ (~m, n \le 30; k \le 10~);
  • Tiếp theo là ~m~ dòng mô tả bảng chữ, mỗi dòng gồm đúng ~n~ kí tự, mỗi kí tự là ngoặc mở '(' hoặc ngoặc đóng ')'.

Output

  • Kết quả ghi ra thiết bị ra chuẩn một số nguyên là số lượng đường đi đếm được chia dư cho ~998244353~.

Sample Input 1

3 3 1
(())
)()
)))

Sample Output 1

4

Subtasks

  • Subtask 1 (30% số điểm): ~m, n \le 5~;
  • Subtask 2 (30% số điểm): ~k = 1~;
  • Subtask 3 (40% số điểm): Không có ràng buộc gì thêm.

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    dex111222333444555  đã bình luận lúc 17, Tháng 3, 2026, 8:38

    Bài này số mod chỉnh lại 998244353 thì mới AC nha. Chắc test bị lỗi.