Dọn phòng bừa bộn
Đề bài
Mô tả
Cho một dãy ngoặc độ dài chẵn, gồm đúng ký tự ( và ký tự ).
Trong một thao tác, bạn chọn một đoạn con liên tiếp và đảo ngược nó, tức là đoạn trở thành . Ví dụ, đảo ngược đoạn của ((())) ta được ()(()).
Ta gọi dãy là gọn gàng nếu:
- toàn bộ là một dãy ngoặc đúng;
- có đúng tiền tố của là dãy ngoặc đúng (tính cả chính ).
Ví dụ, với , dãy (())() là gọn gàng (hai tiền tố đúng là (()) và (())()).
Hãy dùng không quá thao tác để biến thành một dãy gọn gàng. Các thao tác được thực hiện lần lượt. Bạn không cần tối thiểu hóa số thao tác. Dữ liệu đảm bảo luôn có đáp án; nếu có nhiều đáp án, in ra bất kỳ đáp án nào.
Dữ liệu vào
Dòng đầu tiên chứa số nguyên , số bộ dữ liệu.
Mỗi bộ dữ liệu gồm:
- Dòng đầu chứa hai số nguyên và .
- Dòng thứ hai chứa xâu độ dài , chỉ gồm các ký tự
(và).
Dữ liệu ra
Với mỗi bộ dữ liệu:
- Dòng đầu in số nguyên (), số thao tác.
- dòng tiếp theo, mỗi dòng in hai số nguyên () mô tả thao tác đảo ngược đoạn .
Sau khi thực hiện tất cả thao tác, phải là dãy ngoặc đúng và có đúng tiền tố là dãy ngoặc đúng.
Ràng buộc
- , chẵn
- có đúng ký tự
(và ký tự) - Tổng của tất cả bộ dữ liệu không vượt quá
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 8 2 ()(())() 10 3 ))()()()(( 2 1 () 2 1 )( |
1 5 7 5 1 3 3 5 5 7 6 9 7 10 0 1 1 2 |
Bộ 1: đảo đoạn được ()((())), có 2 tiền tố đúng. Bộ 2: sau 5 thao tác được ()()((())), có 3 tiền tố đúng. Bộ 3: dãy đã gọn gàng, không cần thao tác. Bộ 4: đảo cả xâu được (). |
| 4 8 2 )())(()( 10 3 ))()()()(( 2 1 () 2 1 )( |
4 1 2 3 5 4 6 5 8 5 1 3 3 5 5 7 6 9 7 10 0 1 1 2 |
Bộ 1: dãy lần lượt thành ()))(()(, ()())()(, ()(()))(, ()((())). Các bộ còn lại giống ví dụ 1. |
Bình luận