传送门

题意

分析

我们发现该数列遵循下列规律:

1

1,2

1,2,2

1,2,2,2,3

1,2,2,2,3,2,3,3

我们令A[i]表示f[i]开始长为f[i-1]的i的最短表示和

那么得到A[i]=A[i-1]+A[i-2]+f[i-2]

那么先预处理出每一段和A[i],i不会超过84

先连续加A[i],对于剩余一段,递归处理,具体见代码

感谢qwb

代码

#include <bits/stdc++.h>
using namespace std; #define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a)) int t;
ll n;
ll f[101],A[101];
void init()
{
A[2]=A[1]=1;
f[1]=f[2]=1;
F(i,3,84)
{
f[i]=f[i-1]+f[i-2];
A[i]=A[i-1]+A[i-2]+f[i-2];
}
} ll solve(int id,ll num)
{
if(f[id]==num) return A[id];
if(f[id-1]>=num) return solve(id-1,num);
return A[id-1]+num-f[id-1]+solve(id-2,num-f[id-1]);
} int main()
{
init();
for(scanf("%d",&t);t--;)
{
scanf("%lld",&n);
ll sum=0,ans=0;
int id=0;
while(sum+f[id+1]<n) sum+=f[++id];
F(i,1,id) ans+=A[i];
ans+=solve(id+1,n-sum);
printf("%lld\n",ans);
}
return 0;
}

最新文章

  1. nodejs事件模块
  2. 【Android自学日记】搭建Android开发环境
  3. IntelliJ IDEA 发布最新版本13.0.1
  4. 银光类似web visio的节点连线控件Essential Diagram免费下载地址
  5. js完美转换阿拉伯数字为数字大写(原创)
  6. 我所了解的WEB开发(4) - 神奇的URL
  7. codeforces 713A A. Sonya and Queries(状态压缩)
  8. css3实现立方体的旋转功能
  9. overflow:hiddden与绝对定位的应用场景的事例
  10. 5、第5节课CSS补充和html 标签讲解20150924
  11. Sed命令学习
  12. HDU 5194 DZY Loves Balls
  13. WebSocket和Socket
  14. tensorflow会话控制-【老鱼学tensorflow】
  15. html+css常用小笔记(持续更新)
  16. RNN入门(4)利用LSTM实现整数加法运算
  17. Nginx缓存服务
  18. Spring是如何校验XML的
  19. 03:open-falcon报警定制
  20. Resttemplate中设置超时时长方法

热门文章

  1. 解决IDEA输入法不跟随
  2. 如何隐藏掉Nginx的版本号
  3. DotNetBar笔记
  4. 火星坐标、百度坐标、WGS84坐标转换代码(JS)
  5. RabbitMQ 消息队列 安装及使用
  6. C#在线预览文档(word,excel,pdf,txt,png)
  7. JSONP跨域提交表单
  8. Android 自定义格式的对话框
  9. 错误信息:&quot;OraOLEDB.Oracle&quot; 返回了消息 &quot;ORA-12154: TNS: 无法解析指定的连接标识符
  10. win10获取超级管理员权限脚本实现