0
点赞
收藏
分享

微信扫一扫

【YBTOJ进阶训练指导】无限序列【递推】【数学】

北溟有渔夫 2022-02-08 阅读 35

在这里插入图片描述

先找一找序列的规律
发现和斐波那契数列很像
f i f_i fi为斐波那契数列第i项
则前 f i f_i fi个中有 f i − 1 f_{i-1} fi1个1
而且将前 f i f_i fi个去掉后,剩下的序列依然满足
所以直接做就可以了

c o d e code code

#include<iostream>
#include<cstdio>
#define ll unsigned long long

using namespace std;

ll t;
ll a, b, f[110];

ll d(ll x)
{
	ll ans=0;
	while(x)
	{
		ll i=1;
		while(x>=f[i]) i++;
		i--;
//		cout<<f[i-1]<<' '<<f[i]<<' '<<i<<endl; 
		ans+=f[i-1];
		x-=f[i];
	}
	return ans;
}

int main()
{
	scanf("%llu", &t);
	f[1]=f[2]=1;
	for(ll i=3; i<=100; i++)
		f[i]=f[i-1]+f[i-2];
	while(t--)
	{
		scanf("%llu%llu", &a, &b);
		printf("%llu\n", d(b)-d(a-1));
	}
	return 0;
}
举报

相关推荐

0 条评论