首页 > 其他 > 详细

[BZOJ2796][Poi2012]Fibonacci Representation

时间:2016-02-15 20:02:24      阅读:373      评论:0      收藏:0      [点我收藏+]

由于是斐波那契数列,所以$x_i+x_j<=x_k,i<j<k$

所以猜测可以贪心选择两边近的数处理。

技术分享
 1 #include<cstdio>
 2 #include<algorithm>
 3 #define ll long long
 4 #define mid (l+r>>1)
 5 using namespace std;
 6 ll f[505],tot=1;
 7 inline ll findl(ll x)
 8 {
 9     int l=1,r=tot,ans=1;
10     while(l<=r)
11     {
12         if(f[mid]<=x)ans=mid,l=mid+1;
13         else r=mid-1;
14     }
15     return f[ans];
16 }
17 inline ll findr(ll x)
18 {
19     int l=1,r=tot,ans=1;
20     while(l<=r)
21     {
22         if(f[mid]>=x)ans=mid,r=mid-1;
23         else l=mid+1;
24     }
25     return f[ans];
26 }
27 int solve(ll x)
28 {
29     ll l=findl(x),r=findr(x);
30     if(l==r)return 1;
31     if(x-l<=r-x)return solve(x-l)+1;
32     return solve(r-x)+1;
33 }
34 int main()
35 {
36     f[0]=f[1]=1;
37     while(f[tot-1]<=4e17)
38     f[++tot]=f[tot-1]+f[tot-2];
39     int t;scanf("%d",&t);
40     ll x;
41     while(t--)scanf("%lld",&x),
42     printf("%d\n",solve(x));
43 }
View Code

 

[BZOJ2796][Poi2012]Fibonacci Representation

原文:http://www.cnblogs.com/xuruifan/p/5191205.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!