Dãy ngoặc đúng phân biệt

Xem dạng PDF

Gửi bài giải

Điểm: 1,29 (OI)
Giới hạn thời gian: 22.5s
Giới hạn bộ nhớ: 512M
Input: stdin
Output: stdout

Nguồn bài:
2012 ACM Asia Hanoi Regional; Problem setter: Lê Minh Hoàng; TestData rebuild by Lê Yên Thanh
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Người ta định nghĩa một dãy ngoặc đúng như sau:

  • Xâu rỗng là một dãy ngoặc đúng.
  • Nếu A là dãy ngoặc đúng thì (A) cũng là một dãy ngoặc đúng
  • Nếu A, B là những dãy ngoặc đúng thì AB cũng là dãy ngoặc đúng.

Những dãy ngoặc sau được xem là đúng:

  • ()(())
  • ((()))

Những dãy ngoặc sau thì không:

  • )(
  • (((()))
  • )()()(

Một xâu S khác rỗng được gọi là xâu con của T nếu xâu S trùng với một dãy các kí tự liên tiếp của T. Ví dụ "bcd" là xâu con của xâu "abcde" nhưng xâu "dc" thì không.

Cho một xâu T chỉ gồm các kí tự '(' và ')' (kí tự mở ngoặc và đóng ngoặc). Như vậy các xâu con của T có thể là một dãy ngoặc đúng hoặc không. Hãy đếm số lượng xâu con phân biệt của T mà là một dãy ngoặc đúng.

Input

  • Dòng đầu tiên chứa số n là số lượng bộ test (~n\leq 20~).
  • n dòng tiếp theo, mỗi dòng là một bộ test chứa xâu T. Biết rằng độ dài của xâu T không vượt quá 100.000 kí tự.

Output

  • Với mỗi bộ test, xuất ra số lượng xâu con phân biệt của T mà là một dãy ngoặc đúng.

Sample Input

3
(()())()
(()()()()()
()()()(()())(()())

Sample Output

4
5
11

Note

Giải thích: Với bộ test đầu, có 4 xâu con phân biệt là một dãy ngoặc đúng: "()" ; "()()"; "(()())"; "(()())()"


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.