canuc80k6804·5/50

Khoảng cách giữa các bit một

Nộp bài trên LQDOJ

Bài 68 · FFT and NTT

Cho xâu nhị phân dài , đánh chỉ số từ . Với mỗi khoảng cách , đếm số chỉ số thỏa và cả đều bằng . In các đáp án theo tăng dần.

Input

  • Một dòng chứa xâu nhị phân .

Output

  • In số; số thứ là đáp án cho khoảng cách .

Constraints

  • ; 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

101

Output

0 1

Giải thích: Với mỗi khoảng cách, ta duyệt các cặp vị trí cách nhau đúng khoảng đó và chỉ giữ những cặp đều là bit .

Lời giải tóm tắt
  • Thuật toán: Đặt A[i]=1 nếu s[i]='1', ngược lại 0. Đặt B[n-1-i]=A[i]. Tính C=A*B. Với khoảng cách k, hệ số C[n-1-k] bằng
  • Thuật toán: sum_i A[i] A[i+k].
  • Thuật toán: In hệ số đó cho mọi k.
  • Chứng minh đúng: Thay định nghĩa của B vào C[n-1-k]: phần tử ghép với A[i] là B[n-1-k-i]=A[i+k]. Chỉ cặp 1,1 đóng góp 1, do đó tổng chính là số cặp cách nhau k.
  • Độ phức tạp: O(n log n) thời gian, O(n) bộ nhớ.