hdu--5351--MZL's Border

表示看这篇博客后找到了思路:

http://blog.csdn.net/queuelovestack/article/details/47291195

补充一下数据,方便观察规律

m  LBorderm  m-LBorder  fibn

1          0               1          1

2          0               2          1

3          1               2          2

4          1               3          3

5          2               3          5

6          3               3          8

7          2               5          13

8          3               5          21

9          4               5          34

10        5               5          55

11        6               5          89

12        4               8          144

13        5               8          233

14        6               8          377

仔细观察一下,便会得出这样一个结论:

当我们找到第一个i满足m+1<|fibi|时,LBorderm=m-|fibi-2|(|fibi-2|表示斐波那契串fibi-2的长度)  


附上代码:

 

 1 import java.util.*;
 2 import java.math.*;
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6 
 7         BigInteger ar[]=new BigInteger[1000];
 8         ar[1]=BigInteger.valueOf(1);
 9         ar[2]=BigInteger.valueOf(2);
10         for(int i=3;i<1000;++i){
11             ar[i]=ar[i-1].add(ar[i-2]);
12         }
13         Scanner cin=new Scanner(System.in);
14         int t=cin.nextInt();
15         while(t-- >0){
16             int n=cin.nextInt();
17             BigInteger m=cin.nextBigInteger();
18             for(int i=1;i<1000;++i){
19                 if(m.compareTo(ar[i]) <0 && m.compareTo(ar[i-1]) >=0){
20                     m=m.subtract(ar[i-2]).mod(BigInteger.valueOf(258280327));  ;
21                     break;
22                 }
23             }
24             System.out.println(m);
25         }
26     }
27 }
28  

 

posted @ 2017-02-10 19:27  朤尧  阅读(224)  评论(0编辑  收藏  举报