CF#213DIV2:B The Fibonacci Segment

来源:互联网 发布:海关数据查询 编辑:程序博客网 时间:2024/06/05 14:45

You have array a1, a2, ..., an. Segment[l, r] (1 ≤ l ≤ r ≤ n) is good ifai = ai - 1 + ai - 2, for alli (l + 2 ≤ i ≤ r).

Let's define len([l, r]) = r - l + 1,len([l, r]) is the length of the segment[l, r]. Segment [l1, r1], is longer than segment[l2, r2], iflen([l1, r1]) > len([l2, r2]).

Your task is to find a good segment of the maximum length in array a. Note that a segment of length 1 or2 is always good.

Input

The first line contains a single integer n (1 ≤ n ≤ 105) — the number of elements in the array. The second line contains integers:a1, a2, ..., an (0 ≤ ai ≤ 109).

Output

Print the length of the longest good segment in array a.

Sample test(s)
Input
101 2 3 5 8 13 21 34 55 89
Output
10
Input
51 1 1 1 1
Output
2


 

找出符合a[i] = a[i-1]+a[i-2]的最长长度

没有考虑0的状况。。。。。。蛋疼,长久没做CF了,坑成球了。。。

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int a[100005],b[100005],len;int main(){    int maxn,sum;    int i,n;    while(~scanf("%d",&n))    {        sum = 0;        for(i = 0; i<n; i++)        {            scanf("%d",&a[i]);            sum+=a[i];        }        if(sum == 0)        {            printf("%d\n",n);            continue;        }        if(n == 1)        {            printf("1\n");            continue;        }        if(n == 2)        {            printf("2\n");            continue;        }        len = 0;        int l,r,flag = 1;        for(i = 2; i<n; i++)        {            if(a[i-1]+a[i-2] == a[i])                b[len++] = 1;            else                b[len++] = 0;        }        maxn = 0;        l = 0;        r = 0;        for(i = 0; i<len; i++)        {            if(b[i] == 1)            {                if(flag)                {                    l = i;                    flag = 0;                }                else                    r = i;            }            else            {                if(r-l+1>maxn && r!=l)                    maxn = r-l+1;                flag = 1;                l = 0;                r = 0;            }        }        if(r-l+1>maxn && r!=l)            maxn = r-l+1;        printf("%d\n",maxn+2);    }    return 0;}


 

原创粉丝点击