第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛C(大数斐波那契数)
来源:互联网 发布:人人商城2.0 源码下载 编辑:程序博客网 时间:2024/05/22 18:18
问题 C: 来简单地数个数
时间限制: 1 Sec 内存限制: 64 MB
提交: 728 解决: 232
[提交][状态][讨论版]
题目描述
这是一个斐波那契数列:
f1 = 1
f2 = 2
fn = fn-1 + fn-2 (n>=3)
蔡老板想知道,给你两个数a、b,你能否求出在区间[a,b]里有多少个斐波那契数。
输入
多组数据输入。一行为一组输入数据,包括两个非负整数a、b(a <= b <= 10^100),当a=b=0时输入终止。
输出
对每组输入,输出单独一行,包含一个整数表示区间[a,b]里的斐波那契数个数。
样例输入
10 100
1234567890 9876543210
0 0
样例输出
5
4
题解:因为a,b太大,所以按字符串做,先预处理出前1000个数。然后判断即可。
代码:
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<vector>#include<string.h>#define ll long longusing namespace std;//const int N=1e5+10;//*****************************wo zhan de dai ma******************const int mod=1000000007;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) { if(a==0&&b==0)break; 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;}
阅读全文
0 0
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛C(大数斐波那契数)
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛A(组合数学)
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛B(排序)
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛E(线段树)
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛D 分形
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛F(矩阵快速幂)
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛J(字典树 or map)
- 第四届“图灵杯”NEUQ-ACM 程序设计竞赛(团队赛)
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛 C: 来简单地数个数【Java大数】
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)—A
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)【solved 7 / 10】
- **第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)C粉丝与汉诺塔
- 图灵杯-第四届“图灵杯”NEUQ-ACM 程序设计竞赛-C-来简单地数个数
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛总结 【8/10】
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛部分题解
- 图灵杯-第四届“图灵杯”NEUQ-ACM 程序设计竞赛-D-简单图形输出
- 图灵杯-第四届“图灵杯”NEUQ-ACM 程序设计竞赛-J-简单的变位词
- 图灵杯-第四届“图灵杯”NEUQ-ACM 程序设计竞赛-E-简单的RMQ
- Java从入门到精通Chapter7_4温度转换
- Windows配置SQLite
- JAVA使用并行流(ParallelStream)时要注意的一些问题
- Java从入门到精通Chapter7_5
- Android_省和市的二级联动
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛C(大数斐波那契数)
- Integer比较需用equal不用‘==’
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛 E: 简单的RMQ【线段树】
- CSS Sticky Footer: 完美的CSS绝对底部
- web.xml中load-on-startup的作用
- C/C++的预处理指令详解
- 本文主要讲述golang的gui库andlabs/ui使用
- android Spinner控件详解
- 有关Java Web 中CheckBox提交的问题