trang chủ / đề bài / prefflip

Lật tiền tố nhị phân

Đề bài

Mô tả

Cho hai xâu nhị phân a và b cùng độ dài n (chỉ gồm các kí tự 0 và 1).

Một thao tác được định nghĩa như sau: chọn một số nguyên p (1≤p≤n), sau đó với tiền tố độ dài p của a, ta đồng thời đảo bit từng vị trí (đổi 0↔1) và đảo ngược thứ tự các kí tự trong tiền tố đó.

Ví dụ, nếu a=001011 và chọn p=3 thì a trở thành 011011. Nếu tiếp đó chọn p=6 thì a trở thành 001001.

Nhiệm vụ của bạn là biến a thành b bằng không quá 2n thao tác. Có thể chứng minh điều này luôn thực hiện được.

Dữ liệu vào

  • Dòng đầu tiên chứa một số nguyên t (1≤t≤1000) — số bộ dữ liệu.
  • Với mỗi bộ:
    • Dòng đầu chứa số nguyên n (1≤n≤105).
    • Hai dòng kế tiếp lần lượt chứa hai xâu nhị phân a và b độ dài n.

Tổng giá trị n trên toàn bộ các bộ dữ liệu không vượt quá 105.

Dữ liệu ra

Với mỗi bộ, in một dòng theo định dạng:

kp1p2…pk

trong đó 0≤k≤2n là số thao tác đã dùng và pi (1≤pi≤n) là độ dài tiền tố ở thao tác thứ i. Nếu có nhiều phương án hợp lệ, in ra bất kì phương án nào.

Ràng buộc

  • 1≤t≤1000
  • 1≤n≤105
  • Tổng n không vượt quá 105.

Ví dụ

Input Output Giải thích
5
2
01
10
5
01011
11100
2
01
01
10
0110011011
1000110100
1
0
1
3 1 2 1
3 1 5 2
0
7 1 10 8 7 1 2 1
1 1
Bộ 1: 01→11→00→10. Bộ 3: a đã bằng b nên không cần thao tác nào. Các đáp án khác cũng được chấp nhận miễn k≤2n và xâu cuối cùng bằng b.
1
3
000
111
1 3 Lật tiền tố độ dài 3 của a=000: đảo bit từng vị trí thành 111, đảo ngược thứ tự vẫn là 111. Vậy a=b sau đúng 1 thao tác.

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