[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 }
浙公网安备 33010602011771号