URAL 1133. Fibonacci Sequence

题目链接

 1 #include <cstdio>
 2 #include <string>
 3 #include <cstring>
 4 #include <iostream>
 5 using namespace std;
 6 #define LL long long
 7 #define INF 2000000000
 8 LL p[3001];
 9 int main()
10 {
11     int i;
12     LL a,fa,fb,b,n;
13     LL str,mid,end;
14     cin>>a>>fa>>b>>fb>>n;
15     if(a > b)
16     {
17         swap(a,b);
18         swap(fa,fb);
19     }
20     str = -INF;
21     end = INF;
22     while(str <= end)
23     {
24         mid = (str+end)/2;
25         int f1,f2;
26         f1 = f2 = 0;
27         memset(p,-1,sizeof(p));
28         p[a+1000] = fa;
29         p[a+1+1000] = mid;
30         for(i = a+2;i <= b;i ++)
31         {
32             p[i+1000] = p[i-1+1000] + p[i-2+1000];
33             if(p[i+1000] > INF)
34             {
35                 f1 = 1;
36                 break;
37             }
38             if(p[i+1000] < -INF)
39             {
40                 f2 = 1;
41                 break;
42             }
43         }
44         if(f1)
45         end = mid - 1;
46         else if(f2)
47         str = mid + 1;
48         else if(p[b+1000] == fb)
49         break;
50         else if(p[b+1000] > fb)
51         end = mid - 1;
52         else if(p[b+1000] < fb)
53         str = mid + 1;
54     }
55     if(n <= b&&n >= a)
56     ;
57     else if(n < a)
58     {
59         p[a+1000] = fa;
60         p[a+1+1000] = mid;
61         for(i = a-1;i >= n;i --)
62         {
63             p[i+1000] = p[i+2+1000] + p[i+1+1000];
64         }
65     }
66     else
67     {
68         p[a+1000] = fa;
69         p[a+1+1000] = mid;
70         for(i = a+2;i <= n;i ++)
71         {
72             p[i+1000] = p[i-1+1000] + p[i-2+1000];
73         }
74     }
75     cout<<p[n+1000]<<endl;
76     return 0;
77 }
原文地址:https://www.cnblogs.com/naix-x/p/3408744.html