[DHBB25 - DX18 - 11] Bài 2: Biểu thức ngoặc
Xem dạng PDF
Gửi bài giải
Điểm:
40,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, Output Only, 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
Biểu thức ngoặc là xâu chỉ gồm các kí tự '(', ')', '[', ']', '{', '}'. Biểu thức ngoặc đúng và bậc của biểu thức ngoặc đúng được định nghĩa một cách đệ quy như sau:
- 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)', '[A]', '{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~.
Ta sẽ xét hai trường hợp sau:
- ~T = 1~: biểu thức ngoặc chỉ gồm kí tự '(' và ')'.
- ~T = 2~: biểu thức ngoặc gồm kí tự '(', ')', '[', ']', '{', '}'.
Với hai số nguyên ~N, K~, người ta tiến hành tạo ra tất cả các biểu thức ngoặc đúng có độ dài ~N~ và bậc không vượt quá ~K~. Sắp xếp các biểu thức ngoặc theo thứ tự từ điển, chú ý rằng '(' < ')' < '[' < ']' < '{' < '}'.
Yêu cầu: Cho biểu thức ngoặc đúng ~S~, hãy tìm thứ tự của biểu thức ngoặc đúng ~S~.
Input
- Dòng thứ nhất chứa số nguyên ~T~ (~1 \le T \le 2~).
- Dòng thứ hai chứa hai số nguyên ~N~ và ~K~ (~N \le 3000, K \le N/2~).
- Dòng thứ ba chứa ~N~ kí tự của biểu thức ngoặc ~S~.
Output
- Thứ tự của dãy ngoặc ~S~ lấy dư cho ~10^9 + 7~.
Sample Input 1
2
8 4
{}(({}))
Sample Output 1
1008
Bình luận