TWICE9 (Super very hard)

Xem PDF



Tác giả:
Dạng bài
Điểm: 500 (p) Thời gian: 0.5s Bộ nhớ: 256M Input: bàn phím Output: màn hình

**Lưu ý: Bản này khác bản dễ ở time limit và memory limit, ai làm được có thưởng :v **

Một dãy FIBONACCI được định nghĩa như sau: \(F_{0}\) = \(F_{1}\) = 1; \(F_{N}\) = \(F_{N-1}\) + \(F_{N-2}\) \(\forall\) \(N\) > \(1\).

Một vài phần tử đầu của dãy là: 1,1,2,3,5,8,13,21,...

Với mỗi số nguyên dương p, gọi \(D_{p}\) là số cách biểu diễn số p dưới dạng tổng các số FIBONACCI khác nhau.

Bạn được cho một mảng A gồm N phần tử. Với mỗi giá trị k = 1, 2, ..., N, ta định nghĩa \(p_{k}\) = \(F_{A_{1}}\) + \(F_{A_{2}}\) + ... + \(F_{A_{k}}\). Nhiệm vụ của bạn là hãy tính \(D_{p_{k}}\) \(\forall\) k = 1, 2, ..., N. Vì kết quả rất lớn nên đáp án cuối cùng là \(D_{p_{k}}\) modulo \(10^9\) + 7

Input

  • Dòng thứ nhất là số nguyên dương N, số phần tử của mảng A.
  • Dòng thứ hai gồm các số nguyên dương \(A_{1}\), \(A_{2}\), ..., \(A_{N}\).

Output

  • Gồm N dòng, mỗi dòng là \(D_{p_k}\) modulo \(10^9\) + 7.

Scoring

  • Subtask \(1\) (\(5\%\) số điểm): N, \(A_{i}\) \(\leq\) 15.
  • Subtask \(2\) (\(20\%\) số điểm): N, \(A_{i}\) \(\leq\) 100.
  • Subtask \(3\) (\(15\%\) số điểm): N \(\leq\) 100, \(A_{i}\) là số chính phương.
  • Subtask \(4\) (\(10\%\) số điểm): N \(\leq\) 100, \(A_{i}\) không có giới hạn gì thêm.
  • Subtask \(5\) (\(15\%\) số điểm): \(A_{i}\) là các số chẵn.
  • Subtask \(6\) (\(35\%\) số điểm): N \(\leq\) \(10^5\), \(A_{i}\) \(\leq\) \(10^9\)

Example

Test 1

Input
4
4 1 1 5
Output
2
2
1
2
Note
  • \(p_{1}\) = \(F_{4}\) = 5
  • \(p_{2}\) = \(F_{4}\) + \(F_{1}\) = 5 + 1 = 6
  • \(p_{3}\) = \(F_{4}\) + \(F_{1}\) + \(F_{1}\) = 5 + 1 + 1 = 7
  • \(p_{4}\) = \(F_{4}\) + \(F_{1}\) + \(F_{1}\) + \(F_{5}\) = 5 + 1 + 1 + 8 = 15

Vậy ta có:

  • \(D_{p_{1}}\) = 2 (vì số 5 có thể biểu diễn bằng \(F_{2}\) + \(F_{3}\) hay đơn giản là \(F_{4}\) )
  • \(D_{p_{2}}\) = 2 (vì 6 = 1 + 5 = 1 + 2 + 3)
  • \(D_{p_{3}}\) = 1 (vì số 7 chỉ có một cách biểu diễn duy nhất là 2 + 5)
  • \(D_{p_{4}}\) = 2 (vì 15 = 2 + 13 = 2 + 5 + 😎

Bình luận


  • 2
    vinhntndu    10:19 p.m. 27 Tháng 8, 2020

    ai làm đc có thưởng :v mà k chơi lấy code fastest trong 2 cái kia nộp nha :v

    1 phản hồi