trang chủ / bài tập / brackcat

Ghép Dãy Ngoặc

Đề bài

Mô tả

Một dãy ngoặc là một xâu chỉ gồm hai loại ký tự "(" và ")".

Một dãy ngoặc được gọi là đúng nếu có thể biến nó thành một biểu thức số học hợp lệ bằng cách chèn thêm các ký tự "1" và "+" vào giữa các ký tự của xâu. Ví dụ, các dãy "()()" và "(())" là đúng (tương ứng với "(1)+(1)" và "((1+1)+1)"), còn ")(" và "(" thì không đúng.

Cho n dãy ngoặc s1,s2,,sn. Hãy đếm số cặp chỉ số (i,j) với 1i,jn sao cho dãy ngoặc si+sj (phép ghép nối hai xâu) là một dãy ngoặc đúng.

Ví dụ, "()(" + ")()" = "()()()".

Nếu cả si+sjsj+si đều đúng và ij thì cả hai cặp (i,j)(j,i) đều được tính. Nếu si+si là dãy ngoặc đúng thì cặp (i,i) cũng được tính.

Dữ liệu vào

  • Dòng đầu tiên chứa số nguyên n: số lượng dãy ngoặc.
  • n dòng tiếp theo, mỗi dòng chứa một dãy ngoặc: một xâu khác rỗng chỉ gồm các ký tự "(" và ")".

Dữ liệu ra

  • In ra một số nguyên duy nhất: số cặp (i,j) thỏa mãn si+sj là dãy ngoặc đúng.

Ràng buộc

  • 1n3·105
  • Tổng độ dài của tất cả các dãy ngoặc không vượt quá 3·105.

Ví dụ

Input Output Giải thích
3
)
()
(
2 Các cặp thỏa mãn là (3,1) cho ghép "(" + ")" = "()" và (2,2) cho "()" + "()" = "()()".
2
()
()
4 Mọi cặp đều thỏa mãn: (1,1),(1,2),(2,1),(2,2).

Bình luận

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

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0