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

Đổi chỗ ký tự

Đề bài

Mô tả

Cho hai xâu st có cùng độ dài n, chỉ gồm các chữ cái ab.

Ta được phép thực hiện thao tác sau bao nhiêu lần tuỳ ý: chọn một chỉ số pos1 trong xâu s và một chỉ số pos2 trong xâu t (hai chỉ số này có thể bằng nhau hoặc khác nhau), rồi đổi chỗ hai ký tự spos1tpos2.

Hãy xác định số thao tác ít nhất cần thực hiện để hai xâu st trở nên giống hệt nhau, và in ra một dãy thao tác tối ưu bất kỳ. Nếu không thể làm cho hai xâu bằng nhau, hãy báo là không thể.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n là độ dài của st.
  • Dòng thứ hai chứa xâu s gồm n ký tự a hoặc b.
  • Dòng thứ ba chứa xâu t gồm n ký tự a hoặc b.

Dữ liệu ra

Nếu không thể làm cho hai xâu bằng nhau, in ra 1.

Ngược lại, dòng đầu in ra k là số thao tác ít nhất. Trong k dòng tiếp theo, mỗi dòng in ra hai số nguyên pos1pos2 mô tả thao tác tương ứng (đổi chỗ spos1 với tpos2).

Nếu có nhiều dãy thao tác tối ưu, in ra dãy nào cũng được.

Ràng buộc

  • 1n2·105
  • st chỉ gồm các chữ cái ab
  • 1pos1,pos2n

Ví dụ

Input Output Giải thích
1
a
b
-1 Mỗi thao tác chỉ hoán đổi vị trí của các ký tự chứ không làm thay đổi tập ký tự chung, nên số ký tự a trong cả hai xâu luôn không đổi. Ở đây tổng số a bằng 1, là số lẻ, nên không thể chia đều cho hai xâu giống nhau.
8
babbaabb
abababaa
3
2 6
1 3
7 8
Sau thao tác đầu s = bbbbaabb, t = ababaaaa; sau thao tác thứ hai s = abbbaabb, t = abbbaaaa; sau thao tác cuối cả hai xâu đều bằng abbbaaab.
4
abab
aabb
2
3 3
3 2
Đổi chỗ ký tự thứ ba của s với ký tự thứ ba của t, được s = abbb, t = aaab. Sau đó đổi chỗ ký tự thứ ba của s với ký tự thứ hai của t, cả hai xâu đều thành abab. Không thể làm xong chỉ với một 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.400 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.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0