Cân bằng dấu ngoặc
Đề bài
Mô tả
Một dãy ngoặc được gọi là cân bằng nếu có thể chèn thêm các ký tự '+' và '1' để biến nó thành một biểu thức số học hợp lệ. Ví dụ, các dãy "(())()", "()", "(()(()))" là cân bằng, còn ")(", "(()", "(()))(" thì không.
Cho một xâu nhị phân độ dài (với chẵn). Hãy xây dựng hai dãy ngoặc cân bằng và cùng độ dài sao cho với mọi :
- nếu thì ;
- nếu thì .
Nếu không tồn tại cặp dãy như vậy, hãy thông báo.
Dữ liệu vào
- Dòng đầu chứa một số nguyên — số lượng bộ dữ liệu.
- Với mỗi bộ dữ liệu:
- Dòng đầu chứa số nguyên ( chẵn) — độ dài xâu.
- Dòng tiếp theo chứa xâu độ dài gồm các ký tự '0' và '1'.
Dữ liệu ra
Với mỗi bộ dữ liệu:
- Nếu tồn tại hai dãy ngoặc cân bằng thỏa mãn, in ra "YES" trên một dòng, sau đó in hai dãy và trên hai dòng tiếp theo.
- Ngược lại, in ra "NO".
Nếu có nhiều đáp án, in ra bất kỳ đáp án nào.
Ràng buộc
- , chẵn
- Tổng trên tất cả các bộ dữ liệu không vượt quá .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 6 101101 10 1001101101 4 1100 |
YES ((())) ()()() YES (()((()))) ()((()))() NO |
Ở bộ 1, và giống nhau tại các vị trí 1, 3, 4, 6 — đúng bằng những vị trí có . Có nhiều đáp án đúng khác. Ở bộ 3 không có lời giải nào. |
| 2 2 11 4 1001 |
YES () () YES (()) ()() |
Với , hai dãy phải giống hệt nhau nên "()" là đáp án. Với , hai vị trí giữa khác nhau còn hai đầu giống nhau. |
Bình luận