Cân bằng dấu ngoặc

Đề bài

Mô tả

Một dãy ngoặc được gọi là cân bằng nếu có thể chèn thêm 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ụ, các dãy "(())()", "()", "(()(()))" là cân bằng, còn ")(", "(()", "(()))(" thì không.

Cho một xâu nhị phân s độ dài n (với n chẵn). Hãy xây dựng hai dãy ngoặc cân bằng ab cùng độ dài n sao cho với mọi 1in:

  • nếu si=1 thì ai=bi;
  • nếu si=0 thì aibi.

Nếu không tồn tại cặp dãy như vậy, hãy thông báo.

Dữ liệu vào

  • Dòng đầu chứa một số nguyên t — số lượng bộ dữ liệu.
  • Với mỗi bộ dữ liệu:
    • Dòng đầu chứa số nguyên n (n chẵn) — độ dài xâu.
    • Dòng tiếp theo chứa xâu s độ dài n gồm các ký tự '0' và '1'.

Dữ liệu ra

Với mỗi bộ dữ liệu:

  • Nếu tồn tại hai dãy ngoặc cân bằng thỏa mãn, in ra "YES" trên một dòng, sau đó in hai dãy ab trên hai dòng tiếp theo.
  • Ngược lại, in ra "NO".

Nếu có nhiều đáp án, in ra bất kỳ đáp án nào.

Ràng buộc

  • 1t104
  • 2n2·105, n chẵn
  • Tổng n trên tất cả các bộ dữ liệu không vượt quá 2·105.

Ví dụ

Input Output Giải thích
3
6
101101
10
1001101101
4
1100
YES
((()))
()()()
YES
(()((())))
()((()))()
NO
Ở bộ 1, ab giống nhau tại các vị trí 1, 3, 4, 6 — đúng bằng những vị trí có si=1. Có nhiều đáp án đúng khác. Ở bộ 3 không có lời giải nào.
2
2
11
4
1001
YES
()
()
YES
(())
()()
Với s=11, hai dãy phải giống hệt nhau nên "()" là đáp án. Với s=1001, hai vị trí giữa khác nhau còn hai đầu giống nhau.

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 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