当前位置: 首页 > news >正文

hdu 1316 How Many Fibs?

点击即可传送到1316

              **How Many Fibs?**
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5366    Accepted Submission(s): 2088



Problem Description

Recall the definition of the Fibonacci numbers: 
f1 := 1 
f2 := 2 
fn := fn-1 + fn-2 (n >= 3) 

Given two numbers a and b, calculate how many Fibonacci numbers are in the range [a, b]. 





Input

The input contains several test cases. Each test case consists of two non-negative integer numbers a and b. Input is terminated by a = b = 0. Otherwise, a <= b <= 10^100. The numbers a and b are given with no superfluous leading zeros.





Output

For each test case output on a single line the number of Fibonacci numbers fi with a <= fi <= b. 





Sample Input

10 100
1234567890 9876543210
0 0





Sample Output

5
4

题目大意:给你两个数a和b,求a和b之间有几个斐波那契数,包括a和b

解题思路:因为本题是一个很大的数,所以就用字符串,然后再加一个二分就好了。。。。
请看代码:

/*
2015 - 8 - 13 下午
Author: ITAK
今日的我要超越昨日的我,明日的我要胜过今日的我,
以创作出更好的代码为目标,不断地超越自己。
*/
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 105;
char data[1000][N+2];
char a[N+2],b[N+2];
int cmp(char *s1, char *s2)
{
    for(int i=0; i<=N; i++)
    {
        if(i == N)
            return s1[i] - s2[i];
        if(s1[i] != s2[i])
            return s1[i] - s2[i];
    }
}

int Find_up(int i, char *x)
{
    int low=0, high=i;
    while(low <= high)
    {
        int mid = (high+low)/2;
        int val = cmp(x, data[mid]);
        if(val > 0)
            low = mid + 1;
        if(val == 0)
            return mid - 1;
        if(val < 0)
            high = mid - 1;
    }
    return high;
}

int Find_down(int i, char *x)
{
    int low=0, high=i;
    while(low <= high)
    {
        int mid = (high+low)/2;
        int val = cmp(x, data[mid]);
        if(val > 0)
            low = mid + 1;
        if(val == 0)
            return mid + 1;
        if(val < 0)
            high = mid - 1;
    }
    return low;
}
int main()
{
    data[0][105] = 1;
    data[1][105] = 2;
    int i = 2;
    int p = 105;
    while(data[i-1][5] <= 1)
    {
        for(int j=105; j>=p; j--)
            data[i][j] = data[i-1][j] + data[i-2][j];
        for(int j=105; j>=p; j--)
        {
            int c = data[i][j]/10;
            if(c > 0)
            {
                data[i][j] %= 10;
                data[i][j-1] += c;
            }
        }
        if(data[i][p-1] > 0)
            p--;
        i++;
    }
    while(~scanf("%s%s",a,b))
    {
        if(a[0]=='0' && b[0]=='0')
            break;
        int lena = strlen(a)-1;
        int lenb = strlen(b)-1;
        int k;
        for(int d=lena,k=N; d>=0; d--,k--)
        {
            a[k] = a[d] - '0';
            a[d] = 0;
        }
        for(int d=lenb,k=N; d>=0; d--,k--)
        {
            b[k] = b[d] - '0';
            b[d] = 0;
        }
        int L = Find_up(i-1, a);
        int R = Find_down(i-1, b);
        printf("%d\n",R-L-1);
        memset(a, 0, sizeof(a));
        memset(b, 0, sizeof(b));
    }
    return 0;
}

相关文章:

  • jboss7 添加虚拟目录 上传文件路径
  • OSChina 周六乱弹 —— 流氓软件是这样耍流氓的
  • 修改mysql用户密码
  • JavaWeb项目中WEB-INF目录下class文件自动生成以及显示
  • AVAudioPlayer播放音频文件时没声音
  • yum方式安装mysql报错找不到mysql.sock
  • LCM性质 + 组合数 - HDU 5407 CRB and Candies
  • poj 2513 Colored Sticks(欧拉路径+并检查集合+特里)
  • 在eclipse中建立lua开发环境
  • Android 适配
  • 关于闭包的概念之PHP_已迁移
  • ArchSummit北京2015大会九大看点
  • linux挂载windows共享文件夹的方法
  • CRT/LCD/VGA Information and Timing
  • [转载]泛化、实现、依赖和关联的区别
  • [PHP内核探索]PHP中的哈希表
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【comparator, comparable】小总结
  • 2019年如何成为全栈工程师?
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • JavaWeb(学习笔记二)
  • php中curl和soap方式请求服务超时问题
  • Promise初体验
  • rc-form之最单纯情况
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vuex 笔记整理
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 订阅Forge Viewer所有的事件
  • 面试遇到的一些题
  • 区块链分支循环
  • 如何选择开源的机器学习框架?
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 手写一个CommonJS打包工具(一)
  • 微信开放平台全网发布【失败】的几点排查方法
  • 因为阿里,他们成了“杭漂”
  • ​flutter 代码混淆
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​马来语翻译中文去哪比较好?
  • #NOIP 2014#Day.2 T3 解方程
  • #QT(TCP网络编程-服务端)
  • $GOPATH/go.mod exists but should not goland
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (排序详解之 堆排序)
  • (算法)N皇后问题
  • (一) springboot详细介绍
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • @ConfigurationProperties注解对数据的自动封装
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [20190401]关于semtimedop函数调用.txt
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [Angularjs]ng-select和ng-options