hdu1316 How Many Fibs?

//思路就是大整数数组保存fib数,然后二分查找

import java.util.*;
import java.math.*;
import java.io.*;
class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BigInteger[] f = new BigInteger[500];
        f[0]=f[1]=BigInteger.ONE;
        for(int i=2;i<500;i++)
            f[i]=f[i-1].add(f[i-2]);
        f[0]=BigInteger.ZERO;
        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        BigInteger l,r;
        while(sc.hasNext())
        {
            l = sc.nextBigInteger(); r = sc.nextBigInteger();
            if(l.compareTo(BigInteger.ZERO)==0&&r.compareTo(BigInteger.ZERO)==0) break;
            int ansl  =  Arrays.binarySearch(f,l );
            int ansr =  Arrays.binarySearch(f, r);
            if(ansl<0) ansl=-ansl-2;
            if(ansr<0) ansr=-ansr-2;
            if(Arrays.binarySearch(f, l)>0) ansl--;
            System.out.println(ansr-ansl);
        }
    }
}

Iron vegetable けいぐ

附Arrays.binarySearch()的用法:

public static int binarySearch(Object[] a,Object key) 使用二分搜索法来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据元素的自然顺序对数组进行升序排序(通过 sort(Object[]) 方法)。如果没有对数组进行排序,则结果是不确定的。(如果数组包含不可相互比较的元素(例如,字符串和整数),则无法 根据其元素的自然顺序对数组进行排序,因此结果是不确定的。)如果数组包含多个等于指定对象的元素,则无法保证找到的是哪一个。

参数:a - 要搜索的数组key - 要搜索的值

返回:如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 插入点 被定义为将键插入数组的那一点:即第一个大于此键的

元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。

否则返回 (-(插入点) - 1)这句话要注意:要是查询的的值小于数组里面

的最小值那么结果(-(0)-1结果就是-1),如果查询的 值大于数组里面的最大值。那么结果就是(-(它的索引值)-1结果就是-(1+索引值))

时间: 2024-10-17 16:29:36

hdu1316 How Many Fibs?的相关文章

(compareTo) How Many Fibs hdu1316 &amp;&amp; ZOJ1962

How Many Fibs? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7007    Accepted Submission(s): 2761 Problem Description Recall the definition of the Fibonacci numbers: f1 := 1 f2 := 2 fn := fn-

hdu 1316 How Many Fibs?

题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1316 How Many Fibs? Description Recall the definition of the Fibonacci numbers: $f_1 := 1$ $f_2 := 2$ $f_n := f_{n-1} + f_{n-2} \ \ (3 \leq n)$ Given two numbers a and b, calculate how many Fibonacci num

UVA10183 - How Many Fibs?(java大数+二分)

UVA10183 - How Many Fibs?(java大数+二分) 题目链接 题目大意:给你a,b,求[a,b]之间有多少个fibs数. 解题思路:虽然a.b很大,但是在10^100内的fibs却不超过500个.这样就可以先把这些fibs保存在数组中,然后每次二分去找a,b的位置,然后就可以得到之间有多少个fibs. 代码: import java.util.*; import java.math.*; import java.io.*; import java.lang.String.*

HDU 1316-How Many Fibs?(大数类)

How Many Fibs? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4295    Accepted Submission(s): 1689 Problem Description Recall the definition of the Fibonacci numbers: f1 := 1 f2 := 2 fn := fn-

hdu 1316 How Many Fibs? (模拟高精度)

题目大意: 问[s,e]之间有多少个 斐波那契数. 思路分析: 直接模拟高精度字符串的加法和大小的比较. 注意wa点再 s 可以从 0 开始 那么要在判断输入结束的时候注意一下. #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; struct node { char str[111]; int len; void

hdu--1316--How Many Fibs?(java大数)

How Many Fibs? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6371    Accepted Submission(s): 2517 Problem Description Recall the definition of the Fibonacci numbers: f1 := 1 f2 := 2 fn := fn-1

HDU 1316 How Many Fibs?(java,简单题,大数)

题目 /** * compareTo:根据该数值是小于.等于.或大于 val 返回 -1.0 或 1: public int compareTo(BigInteger val) 将此 BigInteger 与指定的 BigInteger 进行比较. 对于针对六个布尔比较运算符 (<, ==, >, >=, !=, <=)中的每一个运算符的各个方法,优先提供此方法. 执行这些比较的建议语句是:(x.compareTo(y) <op> 0), 其中 <op> 是

HDOJ 1316 How Many Fibs?

JAVA大数.... How Many Fibs? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3906    Accepted Submission(s): 1545 Problem Description Recall the definition of the Fibonacci numbers: f1 := 1 f2 :=

hdu 1316 How many Fibs?(高精度斐波那契数)

//  大数继续 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 cas