canuc80k6806·7/50

Đoạn nhị phân gần nhất

Nộp bài trên LQDOJ

Bài 68 · FFT and NTT

Cho hai xâu nhị phân , . Có thể đổi một số ký tự của ; hãy tìm số đổi nhỏ nhất để trùng với một đoạn liên tiếp của .

Input

  • Hai dòng lần lượt chứa hai xâu nhị phân và .

Output

  • In số ký tự ít nhất phải đổi.

Constraints

  • ; hai xâu chỉ gồm và .

Scoring

  • Subtask ( điểm): Kích thước dữ liệu và số lượng token đủ nhỏ để có thể kiểm tra trực tiếp.
  • Subtask ( điểm): Không có ràng buộc bổ sung.

Example

Test 1

Input

001111
11

Output

0

Giải thích: Ta so sánh với từng đoạn cùng độ dài của ; số sai khác nhỏ nhất chính là kết quả.

Lời giải tóm tắt
  • Thuật toán: Mã hóa bit 1 của S thành A, bit 1 của bản đảo T thành B. Tích chập tại alignment l cho both, số vị trí mà hai xâu đều là 1. Prefix sum cho onesS trong đoạn, và tính trước onesT.
  • Thuật toán: Số khác nhau là onesS + onesT - 2*both, vì hai hạng đầu đếm mọi bit 1 và trừ hai lần các cặp 1-1. Lấy nhỏ nhất trên mọi alignment.
  • Chứng minh đúng: Xét một vị trí: cặp 00 đóng góp 0; 01 hoặc 10 đóng góp 1; 11 đóng góp 1+1-2=0. Vậy biểu thức đúng bằng Hamming distance. Convolution cung cấp đúng both cho tất cả alignment cùng lúc.
  • Độ phức tạp: O((|S|+|T|)log(|S|+|T|)) thời gian, O(|S|+|T|) bộ nhớ.