hiho week 113 register

Ended

Participants:356

Verdict:Accepted
Score:100 / 100
Submitted:2016-08-28 19:29:13

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#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];
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX