Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <cstdio>const int MAXFIB = 75026, MOD = 1000000007;int N, fibInv[MAXFIB], g[26];void init() {int a = 1, b = 1, c;for (int i = 3; i <= 25; ++i) {c = a + b;fibInv[c] = i;a = b;b = c;}}int main() {int a;long long ans = 0;init();scanf("%d", &N);while (N--) {scanf("%d", &a);if (a >= MAXFIB) continue;if (fibInv[a]) {ans += g[fibInv[a] - 1];ans %= MOD;g[fibInv[a]] += g[fibInv[a] - 1];g[fibInv[a]] %= MOD;}else if (1 == a) {g[2] += g[1];