Mã hóa xâu con

Đề bài

Mô tả

Ta gọi một phép mã hóa là một cách chọn ra một số cặp chữ cái trong bảng chữ cái tiếng Anh thường, sao cho mỗi chữ cái xuất hiện trong nhiều nhất một cặp. Khi mã hóa một xâu, ta thay thế mỗi chữ cái bằng chữ cái đi cùng cặp với nó (nếu có); những chữ cái không thuộc cặp nào thì giữ nguyên.

Ví dụ, nếu chọn các cặp (l,r), (p,q)(a,o) thì xâu "parallelogram" sẽ biến thành "qolorreraglom".

Cho hai xâu ST gồm các chữ cái tiếng Anh thường. Hãy tìm tất cả các vị trí m (1m|S||T|+1) sao cho xâu con SmSm+1Sm+|T|1 có thể biến thành T bằng một phép mã hóa nào đó (mỗi vị trí m được phép dùng một bộ cặp riêng).

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên |S||T| — độ dài của ST.
  • Dòng thứ hai chứa xâu S.
  • Dòng thứ ba chứa xâu T.

Cả hai xâu chỉ gồm các chữ cái tiếng Anh thường.

Dữ liệu ra

  • Dòng đầu in ra số k — số vị trí thỏa mãn.
  • Dòng thứ hai in ra k số nguyên m1,m2,,mk theo thứ tự tăng dần, cách nhau bởi dấu cách. Nếu k=0, in ra một dòng trống.

Ràng buộc

  • 1|T||S|2·105.

Ví dụ

Input Output Giải thích
21 13
paraparallelogramgram
qolorreraglom
1
5
Xâu con bắt đầu tại vị trí 5 là "parallelogram"; với các cặp (l,r),(p,q),(a,o) nó mã hóa thành "qolorreraglom".
11 5
abacabadaba
acaba
3
1 3 7
Ba xâu con "abaca", "acaba", "adaba" đều có thể mã hóa thành "acaba" (ví dụ vị trí 1: cặp (b,c) biến "abaca" thành "acaba"; vị trí 3: giữ nguyên).

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