Dọn phòng bừa bộn

Đề bài

Mô tả

Cho một dãy ngoặc s=s1s2…sn độ dài n chẵn, gồm đúng n2 ký tự ( và n2 ký tự ).

Trong một thao tác, bạn chọn một đoạn con liên tiếp s[l…r] và đảo ngược nó, tức là đoạn sl,sl+1,…,sr trở thành sr,sr−1,…,sl. Ví dụ, đảo ngược đoạn s[2…4] của s= ((())) ta được ()(()).

Ta gọi dãy s là gọn gàng nếu:

  • toàn bộ s là một dãy ngoặc đúng;
  • có đúng k tiền tố của s là dãy ngoặc đúng (tính cả chính s).

Ví dụ, với k=2, dãy (())() là gọn gàng (hai tiền tố đúng là (()) và (())()).

Hãy dùng không quá n thao tác để biến s thành một dãy gọn gàng. Các thao tác được thực hiện lần lượt. Bạn không cần tối thiểu hóa số thao tác. Dữ liệu đảm bảo luôn có đáp án; nếu có nhiều đáp án, in ra bất kỳ đáp án nào.

Dữ liệu vào

Dòng đầu tiên chứa số nguyên t, số bộ dữ liệu.

Mỗi bộ dữ liệu gồm:

  • Dòng đầu chứa hai số nguyên n và k.
  • Dòng thứ hai chứa xâu s độ dài n, chỉ gồm các ký tự ( và ).

Dữ liệu ra

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

  • Dòng đầu in số nguyên m (0≤m≤n), số thao tác.
  • m dòng tiếp theo, mỗi dòng in hai số nguyên l,r (1≤l≤r≤n) mô tả thao tác đảo ngược đoạn s[l…r].

Sau khi thực hiện tất cả thao tác, s phải là dãy ngoặc đúng và có đúng k tiền tố là dãy ngoặc đúng.

Ràng buộc

  • 1≤t≤100
  • 2≤n≤2000, n chẵn
  • 1≤k≤n2
  • s có đúng n2 ký tự ( và n2 ký tự )
  • Tổng n của tất cả bộ dữ liệu không vượt quá 2000

Ví dụ

Input Output Giải thích
4
8 2
()(())()
10 3
))()()()((
2 1
()
2 1
)(
1
5 7
5
1 3
3 5
5 7
6 9
7 10
0
1
1 2
Bộ 1: đảo đoạn [5,7] được ()((())), có 2 tiền tố đúng. Bộ 2: sau 5 thao tác được ()()((())), có 3 tiền tố đúng. Bộ 3: dãy đã gọn gàng, không cần thao tác. Bộ 4: đảo cả xâu được ().
4
8 2
)())(()(
10 3
))()()()((
2 1
()
2 1
)(
4
1 2
3 5
4 6
5 8
5
1 3
3 5
5 7
6 9
7 10
0
1
1 2
Bộ 1: dãy lần lượt thành ()))(()(, ()())()(, ()(()))(, ()((())). Các bộ còn lại giống ví dụ 1.

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