HDU1316(求区间斐波那契数的个数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1316
题意:给两个数a和b,其中它们可能很大,最大到10^100,然后求去区间[a,b]内有多少个fib数。
分析:这个题呢,看数据肯定是要当字符串处理的,那么对于本题我的思路就是先把fib数长度小于等于100的预处理出来。
然后呢,就与a和b比较,分别找出刚好大于等于a的fib数的下标和刚好小于等于b的fib数下标,假设分别是record1和
record2,那么record2-record1+1就是答案了。
估计了一下,由于在1000以内的fib数的长度就超过了100,所以预处理到1000个fib数就行了。
#include <iostream>
#include <string.h>
#include <stdio.h> using namespace std;
const int N=1005; int fib[N][105];
int f[N][105];
int h[N]; void Solve()
{
memset(fib,0,sizeof(fib));
h[0]=0;h[1]=0;
fib[0][0]=1;fib[1][0]=1;
for(int i=2;i<N;i++)
{
for(int j=0;j<105;j++)
{
fib[i][j]+=fib[i-1][j]+fib[i-2][j];
if(fib[i][j]>=10)
{
fib[i][j]-=10;
fib[i][j+1]++;
}
}
for(int j=104;j>=0;j--)
{
if(fib[i][j])
{
h[i]=j;
break;
}
}
}
} bool compare1(char *str,int len,int a[],int n)
{
if(n<len) return true;
if(n>len) return false;
for(int i=0;i<n;i++)
{
if(str[i]-'0'>a[i]) return true;
if(str[i]-'0'<a[i]) return false;
}
return true;
} bool compare2(char *str,int len,int a[],int n)
{
if(n>len) return true;
if(n<len) return false;
for(int i=0;i<n;i++)
{
if(str[i]-'0'<a[i]) return true;
if(str[i]-'0'>a[i]) return false;
}
return true;
} char a[105],b[105]; int main()
{
Solve();
for(int i=0;i<N;i++)
for(int j=h[i];j>=0;j--)
f[i][h[i]-j]=fib[i][j];
int record1,record2;
while(cin>>a>>b)
{
int len1=strlen(a);
int len2=strlen(b);
if(len1==1&&len2==1&&a[0]=='0'&&b[0]=='0') break;
for(int i=1;i<N;i++)
{
if(compare2(a,len1,f[i],h[i]+1))
{
record1=i;
break;
}
}
for(int i=N-1;i>=1;i--)
{
if(compare1(b,len2,f[i],h[i]+1))
{
record2=i;
break;
}
}
cout<<record2-record1+1<<endl;
}
return 0;
}
HDU1316(求区间斐波那契数的个数)的更多相关文章
- hdu1316(大数的斐波那契数)
题目信息:求两个大数之间的斐波那契数的个数(C++/JAVA) pid=1316">http://acm.hdu.edu.cn/showproblem.php? pid=1316 这里 ...
- C++求斐波那契数
题目内容:斐波那契数定义为:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>1且n为整数) 如果写出菲氏数列,则应该是: 0 1 1 2 3 5 8 13 21 34 …… ...
- POJ 3070(求斐波那契数 矩阵快速幂)
题意就是求第 n 个斐波那契数. 由于时间和内存限制,显然不能直接暴力解或者打表,想到用矩阵快速幂的做法. 代码如下: #include <cstdio> using namespace ...
- hdu1568&&hdu3117 求斐波那契数前四位和后四位
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568 题意:如标题所示,求斐波那契数前四位,不足四位直接输出答案 斐波那契数列通式: 当n<=2 ...
- 用x种方式求第n项斐波那契数,99%的人只会第一种
大家好啊,我们又见面了.听说有人想学数据结构与算法却不知道从何下手?那你就认真看完本篇文章,或许能从中找到方法与技巧. 本期我们就从斐波那契数列的几种解法入手,感受算法的强大与奥妙吧. 原文链 ...
- 求斐波那契数的python语言实现---递归和迭代
迭代实现如下: def fab(n): n1 = 1 n2 = 1 if n<1: print("输入有误!") return -1 while (n-2)>0: n3 ...
- 数学算法(一):快速求斐波那契数第n项通过黄金分割率公式
有一个固定的数学公式= =,不知道的话显然没法应用 首先黄金分割率接近于这个公式, (以下为黄金分割率与斐波那契的关系,可跳过) 通过斐波那契数列公式 两边同时除以 得: (1) 注意后一项比前一项接 ...
- noip模拟9[斐波那契·数颜色·分组](洛谷模拟测试)
这次考试还是挺好的 毕竟第一题被我给A了,也怪这题太简单,规律一眼就看出来了,但是除了第一题,剩下的我只有30pts,还是菜 第二题不知道为啥我就直接干到树套树了,线段树套上一个权值线段树,然后我发现 ...
- Project Euler 104:Pandigital Fibonacci ends 两端为全数字的斐波那契数
Pandigital Fibonacci ends The Fibonacci sequence is defined by the recurrence relation: F[n] = F[n-1 ...
随机推荐
- Delphi中的“委托”
.NET中有委托(Delegate)的概念,其声明形式如下所示: public delegate void MyDelegate(int aIntParam, string aStringPa ...
- 在Spring Boot启动后执行指定代码
在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化环境,准备测试数据等等. 在Spring中可以通过ApplicationListener来实现相关的功能,不过在配合Spring Bo ...
- 求最大值最小值的方法 时间复杂度O(n)
#include<iostream> #include <iostream> #include <bitset> #include <ctime> us ...
- 文本相似度算法——空间向量模型的余弦算法和TF-IDF
1.信息检索中的重要发明TF-IDF TF-IDF是一种统计方法,TF-IDF的主要思想是,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分 ...
- File,FileInputStream,FileReader,InputStreamReader,BufferedReader 的使用和区别
1 ) File 类介绍 File 类封装了对用户机器的文件系统进行操作的功能.例如,可以用 File 类获得文件上次修改的时间移动, 或者对文件进行删除.重命名.换句话说,流类关注的是文件内容,而 ...
- 自动分组+合并完整的sql脚本
BEGIN#前提:指定字符串长度为8字符定长#逻辑:循环8次,比对2个字符串相同索引位置下的数值大小,并取结果最大值.#示例:merge1(输入参数source1,输入参数source2,输出结果re ...
- BCS--使用SharePoint Designer创建外部内容类型
使用SharePoint Designer创建外部列表(也可以在浏览器中创建列表) http://www.cnblogs.com/haogj/archive/2011/05/01/2033845.ht ...
- 1724: [Usaco2006 Nov]Fence Repair 切割木板( 贪心 )
倒过来看 , 每次总是选择最短的两块木板合并 , 用heap维护 ------------------------------------------------------------------- ...
- Oracle/Mysql批量插入的sql,效率比较高
1.oracle 批量插入: insert into tableName(col1,col2,col3...) select 1,'第一行第一列值','第二列值' from dual union ...
- VS2008非托管C++调用wcf(WebService)服务
在Visual Studio 2008以及以后版本中,微软停止了非托管C++的直接WebService引用.不过ATL Server代码已经托管到开源网站上,我们可以找到ATL Server的源代码, ...