Sắp xếp lại dãy ngoặc
Đề bài
Mô tả
Cho một dãy ngoặc độ dài , chỉ gồm các ký tự ( và ).
Một dãy ngoặc được gọi là đúng (hợp lệ) nếu có thể chèn 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ụ: (())(), (), (()(())) là các dãy đúng; còn )(, ((), (()))( thì không.
Bạn được phép thực hiện thao tác sắp xếp lại sau nhiều lần tuỳ ý (kể cả ):
- Chọn một đoạn con liên tiếp của , độ dài , rồi sắp xếp lại các ký tự trong đoạn đó theo thứ tự bất kỳ. Thao tác này tốn đơn vị thời gian.
Lưu ý rằng thao tác này không thay đổi tổng số ký tự ( và ) trong .
Hãy tính tổng thời gian nhỏ nhất để biến thành một dãy ngoặc đúng, hoặc xác định rằng điều đó là không thể.
Dữ liệu vào
- Dòng đầu chứa số nguyên — độ dài của .
- Dòng thứ hai chứa xâu độ dài , chỉ gồm các ký tự
(và).
Dữ liệu ra
Một số nguyên duy nhất — tổng thời gian nhỏ nhất, hoặc nếu không thể.
Ràng buộc
- .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 8 ))((())( |
6 | Sắp xếp lại đoạn ())(( → ()()) tốn giây, được ()()())(. Sau đó sắp xếp lại đoạn ()( → ()) tốn giây, được ()()()(). Tổng thời gian là . |
| 3 (() |
-1 | Số dấu ( và ) không bằng nhau nên không thể biến thành dãy đúng. |
| 4 ()() |
0 | Dãy đã đúng, không cần thao tác nào. |
Bình luận