HSG12 Hà Nội 2026 - Xóa đoạn ngoặc

Xem dạng PDF

Gửi bài giải

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

Tác giả:
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

Định nghĩa chuỗi ngoặc đúng:

  • Chuỗi rỗng là chuỗi ngoặc đúng;

  • Nếu ~X~ là chuỗi ngoặc đúng thì ~(X)~ cũng là chuỗi ngoặc đúng;

  • Nếu ~X~ và ~Y~ là hai chuỗi ngoặc đúng thì ~XY~ cũng là chuỗi ngoặc đúng.

Ví dụ:

  • Chuỗi ngoặc đúng: "", "()", "(())", "()()", "(())()()",...;

  • Chuỗi ngoặc không đúng: "(", "()(", "())(", ")()(",...

Cho chuỗi ~S~ có độ dài ~N~, chỉ gồm hai loại ký tự '('')'. Chọn hai số nguyên dương ~L~ và ~R~ ~(1 \le L \le R \le N)~, xoá tất cả các ký tự từ vị trí thứ ~L~ đến vị trí thứ ~R~ của chuỗi ~S~.

Ví dụ: ~S =~ "(())(())". Chọn ~L = 3~ và ~R = 6~; đoạn cần xoá là đoạn ký tự được gạch giữa trong chuỗi. Chuỗi ~S~ sau khi xoá: ~S =~ "(())".

Yêu cầu: Hãy đếm số cách chọn ~L, R~ để chuỗi sau khi xoá là một chuỗi ngoặc đúng.

Input

  • Dòng đầu tiên chứa số nguyên dương ~N~ ~(1 \le N \le 10^5)~;

  • Dòng thứ hai chứa xâu ~S~ gồm ~N~ ký tự '('')'.

Output

  • Một số nguyên dương là kết quả bài toán.

Scoring

Subtask Điểm Ràng buộc
1 ~30\%~ ~N \le 200~
2 ~30\%~ Chuỗi ban đầu là chuỗi ngoặc đúng
3 ~20\%~ ~N \le 2000~
4 ~20\%~ Không có giới hạn gì thêm

Sample Input 1

5
())()

Sample Output 1

6

Sample Input 2

4
(())

Sample Output 2

2

Notes

Các cách xoá thoả mãn trong ví dụ 1:

  • ~L = 1, R = 5~: ~S =~ "";

  • ~L = 1, R = 3~: ~S =~ "()";

  • ~L = 2, R = 4~: ~S =~ "()";

  • ~L = 3, R = 5~: ~S =~ "()";

  • ~L = 2, R = 2~: ~S =~ "()()";

  • ~L = 3, R = 3~: ~S =~ "()()".

Các cách xoá thoả mãn trong ví dụ 2:

  • ~L = 1, R = 4~: ~S =~ "";

  • ~L = 2, R = 3~: ~S =~ "()".


Bình luận

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


Không có bình luận tại thời điểm này.