51nod 1350 斐波那契表示【斐波那契数列】
来源:互联网 发布:mac 拍照照片在哪里 编辑:程序博客网 时间:2024/06/03 14:53
Description
每一个正整数都可以表示为若干个斐波那契数的和,一个整数可能存在多种不同的表示方法,例如:14 = 13 + 1 = 8 + 5 + 1,其中13 + 1是最短的表示(只用了2个斐波那契数)。定义F(n) = n的最短表示中的数字个数,F(14) = 2,F(100) = 3(100 = 3 + 8 + 89),F(16) = 2(16 = 8 + 8 = 13 + 3)。定义G(n) = F(1) + F(2) + F(3) + …… F(n),G(6) = 1 + 1 + 1 + 2 + 1 + 2 = 8。给出若干个数字n,求对应的G(n)。
题解
首先有一个性质:最短的表示一定是每次都取能取的最大的斐波那契数。
这样,
代码
#include<cstdio>#include<cstring>#include<algorithm>#define LL long long#define maxn 100using namespace std;inline char nc(){ static char buf[100000],*i=buf,*j=buf; return i==j&&(j=(i=buf)+fread(buf,1,100000,stdin),i==j)?EOF:*i++;}inline LL _read(){ LL sum=0;char ch=nc(); while(!(ch>='0'&&ch<='9'))ch=nc(); while(ch>='0'&&ch<='9')sum=sum*10+ch-48,ch=nc(); return sum;}int T,n;LL f[maxn],g[maxn];int find(LL x){ int l=1,r=n; while(l<=r){ int mid=(l+r)>>1; if(f[mid]<=x&&f[mid+1]>x)return mid; if(f[mid]>x)r=mid-1; else l=mid+1; }}LL G(LL x){ if(!x)return 0; int p=find(x); return G(x-f[p])+g[p]+x-f[p];}int main(){ freopen("fibonacci.in","r",stdin); freopen("fibonacci.out","w",stdout); T=_read(); n=1;f[1]=f[0]=1; while(f[n]+f[n-1]<=1e17)f[n+1]=f[n]+f[n-1],n++; f[0]=0;f[n+1]=1e18;g[1]=1;g[2]=2; for(int i=3;i<=n;i++)g[i]=g[i-1]+g[i-2]+f[i-2]-1; while(T--){ LL x=_read(); printf("%lld\n",G(x)); } return 0;}
阅读全文
0 0
- 【斐波那契数列】51Nod 1350 斐波那契表示
- 51nod 1350 斐波那契表示【斐波那契数列】
- 51Nod-1350-斐波那契表示
- 51nod 1350 斐波那契表示
- 51nod-1350:斐波那契表示
- 51nod-1350 斐波那契表示(规律)
- 51nod 1350 斐波那契表示(规律)
- 51NOD 1350 斐波那契表示 规律+递归
- 51nod 1350 斐波那契表示 (数学)
- 51nod 1350 斐波那契表示 规律题
- 51nod 1350 斐波那契表示
- [斐波那契拆分 乱搞 数学] 51Nod 1350 斐波那契表示
- 51nod 1031 骨牌覆盖 斐波那契数列
- 51nod-斐波那契表示(找规律)
- 斐波那契数列的Java表示
- 51nod 1350 斐波那契表示(打表+找规律)
- 斐波那契数列
- 斐波那契数列
- 记录一下Material Dialogs的使用
- Django Temples中的注意点
- 最大流之Dinic算法
- SSM项目整合笔记-原项目重构
- hdu 6047
- 51nod 1350 斐波那契表示【斐波那契数列】
- Leetcode-4-Median of Two Sorted Arrays
- python 一键升级所有安装包
- Linux搭建git服务器
- SDUT 2504 多项式求和
- 史上最难的一道Java面试题
- 二叉树、list单向链表的实现( python版 Java版)-17-9-18
- React native开发环境配置
- BeanUtils.copyProperties参数赋值顺序