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

Dãy ngoặc hợp lệ

Đề bài

Mô tả

Một dãy ngoặc được gọi là hợp lệ (regular bracket sequence — RBS) nếu có thể chèn thêm các ký tự +1 vào dãy để thu được một biểu thức số học đúng. Ví dụ, các dãy (())(), ()(()(())) là hợp lệ, còn )(, (()(()))( thì không.

Cho một dãy s gồm n ký tự, mỗi ký tự là (, ), hoặc ?. Trong sđúng một ký tự (đúng một ký tự ).

Bạn phải thay thế mỗi ký tự ? bằng ( hoặc ) (các ? khác nhau có thể được thay khác nhau). Không được thay đổi thứ tự, không được xoá hay chèn ký tự khác, và bắt buộc phải thay mọi ?.

Hãy xác định xem có thể thu được một dãy ngoặc hợp lệ sau khi thay thế hay không.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t (1t1000) — số test.
  • Mỗi test gồm một dòng chứa dãy s (2|s|100), gồm các ký tự (, ), ?. Đảm bảo s có đúng một ( và đúng một ).

Dữ liệu ra

Với mỗi test, in YES nếu có thể thu được dãy ngoặc hợp lệ, ngược lại in NO.

Ví dụ

Input Output Giải thích
5
()
(?)
(??)
??()
)?(?
YES
NO
YES
YES
NO
Test 1: đã hợp lệ. Test 3: thay thành (()) hoặc ()(). Test 4: thay thành ()(). Test 2 độ dài lẻ nên không thể. Test 5: ký tự ) đứng đầu nên mọi cách thay đều bắt đầu bằng ).
3
)??(
()??
??)(
NO
YES
NO
Test 1: )??( luôn bắt đầu bằng ), không thể hợp lệ. Test 2: thay thành ()(). Test 3: ??)() đứng trước (, mọi cách thay đều mất cân bằng tại vị trí của ).

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