canuc80k1828·29/50

Những Viên Ngọc Ma Thuật

Nộp bài trên LQDOJ

Bài 1.9 · Matrix Multiplication

Xếp một hàng gồm một số hữu hạn viên ngọc; số viên không được cho trước. Mỗi viên được chọn ở đúng một trong hai dạng:

  • dạng thường chiếm đơn vị độ dài;
  • dạng mở rộng chiếm đơn vị độ dài.

Một cấu hình được xác định bởi thứ tự các dạng viên trong hàng. Vì vậy, chẳng hạn, một viên thường rồi một viên mở rộng khác với một viên mở rộng rồi một viên thường.

Hãy đếm số cấu hình có tổng độ dài đúng bằng .

Input

  • Input gồm hai số nguyên và .

Output

  • In số cấu hình theo modulo .

Constraints

  • .
  • .

Scoring

  • Subtask (): .
  • Subtask (): không có giới hạn bổ sung.

Example

Test 1

Input

4 3

Output

3

Giải thích: Ba cấu hình tương ứng với các dãy độ dài có thứ tự và .

Lời giải tóm tắt
  • Phân tích: Gọi f(n) là số cấu hình. Phần tử đầu chiếm 1 hoặc m đơn vị nên f(n)=f(n-1)+f(n-m).
  • Thuật toán: Dùng companion matrix kích thước m và nâng lên lũy thừa n.
  • Chứng minh tính đúng đắn: Hai loại phần tử đầu rời nhau và bao phủ mọi cấu hình; ma trận ghi đúng truy hồi với f(0)=1.
  • Độ phức tạp: Thời gian O(m^3 log n); bộ nhớ O(m^2).