[Codeforces] The Fibonacci Segment

http://codeforces.com/problemset/problem/365/B

最开始我寻思这题分治题吧, 就开始分, 感觉分治还是写的少控制的不好, 4wa, 都快放弃了,

后来群里halo大神说, 他用暴力解的O(n), 我顿悟了, 开始暴力裸写, 一次A掉.

思路就是:遍历数组, 用两个"指针", l和r, 来标识找到的斐波那契数列, 每找到新的 都记录一下len(l,r), 并更新l和r值.

 1 #include <cstdio>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 int arr[100001] = {0};
 7 int num = 0;
 8 
 9 int getLen(int left, int right) {
10     return right - left + 1;
11 }
12 int solve() {
13     if (num == 1 || num == 2) {
14         return num;
15     }
16     int l = 0, r = 0, m = 0;
17     for (int i = 0; i + 2 < num; ++i) {
18         if (arr[i] + arr[i + 1] == arr[i + 2]) {
19             r = i + 2;
20         } else {
21             if (getLen(l, i + 1) > m) {
22                 m = getLen(l, i + 1);
23             } 
24             l = i + 1;
25         }
26     }
27     int t = getLen(l, r);
28     if (t > m) {
29         m = t;
30     }
31     return m;
32 }
33 
34 int main()
35 {
36     scanf("%d", &num);
37     for (int i = 0; i < num; ++i) {
38         scanf("%d", &arr[i]);
39     }
40     printf("%d\n", solve());
41     return 0;
42 }

 

posted @ 2013-11-20 02:40  NextLife  阅读(262)  评论(0)    收藏  举报