trang chủ / đề bài / brackreord

Sắp xếp lại dãy ngoặc

Đề bài

Mô tả

Cho một dãy ngoặc s độ dài n, 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ả 0):

  • Chọn một đoạn con liên tiếp của s, độ 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 s.

Hãy tính tổng thời gian nhỏ nhất để biến s 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 n — độ dài của s.
  • Dòng thứ hai chứa xâu s độ dài n, 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 −1 nếu không thể.

Ràng buộc

  • 1≤n≤106.

Ví dụ

Input Output Giải thích
8
))((())(
6 Sắp xếp lại đoạn [1,4] ())(( → ()()) tốn 4 giây, được ()()())(. Sau đó sắp xếp lại đoạn [7,8] ()( → ()) tốn 2 giây, được ()()()(). Tổng thời gian là 4+2=6.
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

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0