码迷,mamicode.com
首页 > 其他好文 > 详细

hdu1316 How Many Fibs?

时间:2014-09-02 21:18:15      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   使用   java   ar   

bubuko.com,布布扣
//思路就是大整数数组保存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+索引值))

hdu1316 How Many Fibs?

标签:style   blog   http   color   os   io   使用   java   ar   

原文地址:http://www.cnblogs.com/syzhd/p/3952217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!