题目名称:MZL's Border

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5351

题意:给出fib 1 = b,fib2 = a ; fib i =
fib i-1 fib i-2 ,这个递推关系,比如。fib 3 = ab,fib 4 =
aba 然后说了一大堆东西,事实上就是要我们求前m个字母中满足 i < n , s [ 1 : i ]=s [ n - i - 1 : n ] 。( s [ 1 : i ]表示串 s 的子串s1s2s3s4s4...si ) 的 i 的最大值

思路:看到这道题是不是自然而然的就想到了KMP。对,一開始我用KMP准备把最大的那个串给保存在next数组里面,因为该串是斐波拉切增长的,,所以数组爆了,然后这道题每一次是把上一个串加到后面,所以想到了打表找规律。0  0 | 1  1 | 2 3  2 3 | 4 5
6  4 5 6 | 7 8 9 10 11  7 8 9 10 11 | 12 13 14 15 16 17 18 19  12 13 14 15 16 17 18 19  这样是不是规律就出来了啊==。然后还得用高精度==。因为JAVA 的高精度比較easy写,以下给出JAVA的代码

代码例如以下:

  1. import java.math.BigInteger;
  2. import java.util.Scanner;
  3. public class Main {
  4. public static void main(String[] args){
  5. Scanner in=new Scanner(System.in);
  6. int t;
  7. while(in.hasNext())
  8. {
  9. t=in.nextInt();
  10. for(int pp=0;pp<t;pp++)
  11. {
  12. BigInteger n,m,sum=BigInteger.ONE;
  13. BigInteger cnt=BigInteger.ZERO;
  14. BigInteger ss[] = new BigInteger[3];
  15. ss[1]=BigInteger.ONE;ss[0]=BigInteger.ONE;
  16. cnt=new BigInteger("4");
  17. n = in.nextBigInteger();
  18. m = in.nextBigInteger();
  19. BigInteger two = new BigInteger("2");
  20. if(new BigInteger("3").compareTo(m)==1) //m<3
  21. System.out.println("0");
  22. else{
  23. for(;;)
  24. {
  25. ss[2]=ss[1].add(ss[0]);
  26. if(( (cnt.add(ss[2].add(ss[2]))).compareTo(m) ) ==1) //cnt+ss[2]*2>m
  27. break;
  28. cnt=cnt.add(ss[2].add(ss[2])); //cnt=cnt+ss[2]*2
  29. sum=(sum.add(ss[2])).mod(new BigInteger("258280327")); //sum=(sum+ss[2])%258280327
  30. ss[0]=ss[1];
  31. ss[1]=ss[2];
  32. }
  33. if(m.subtract(cnt).compareTo(ss[2])==1)
  34. System.out.println( (m.subtract(ss[2]).add(sum).subtract(cnt)).mod(new BigInteger("258280327")));
  35. else
  36. System.out.println( (m.add(sum).subtract(cnt) ) .mod(new BigInteger("258280327")));
  37. // if(m-cnt>ss[2])
  38. // cout<<(m-ss[2]+sum-cnt)%258280327<<endl;
  39. // else
  40. // cout<<(m+sum-cnt)%258280327<<endl;
  41. // }
  42. }
  43. }
  44. }
  45. }
  46. }

hdu5351的更多相关文章

  1. hdu5351 MZL's Border(规律题,java)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud MZL's Border Time Limit: 2000/1000 MS (Ja ...

  2. HDU-5351

    MZL's Border Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  3. [hdu5351]找规律,大整数模板

    题意:f(1)="a",f(2)="b",f(i)=f(i-1)+f(i-2),"+"表示连接符.给定n,m,求f(n)的前m个字符的“ne ...

随机推荐

  1. HDU 2196 Computer 树形DP经典题

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...

  2. 【机房重构】—上机&amp;订餐

    前几天通过UML图中的时序图.让我对于机房重构中的每一条线理解的更加清晰.曾经认为上机特别的乱,在一次偶遇中,得知了原来它能够转化成我们平时订餐.以下就听我说一说上机&订餐的故事吧! 又是发生 ...

  3. mbed

    mbed介绍--ARM最新面向IOT的RTOS与平台 文章为本人原创,转载请注明:http://blog.csdn.net/guo8113/article/details/40479303 mbed是 ...

  4. 通过PowerShell卸载全部的SharePoint 2010 解决方式

    通过PowerShell卸载全部的SharePoint 2010 解决方式         为了演示.我常常须要拆毁再重建SharePoint 2010 环境.         我常常须要用到的操作就 ...

  5. Atom介绍和安装步骤

    Atom是全然基于web技术开发而成的一款编辑器,其底层架构依赖于chromium,google chrome浏览器也是基于此.编辑器的每一个窗体都是本地渲染的web页面,而且其风格与时下流行的sub ...

  6. [Android 性能优化系列]内存之基础篇--Android怎样管理内存

    大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...

  7. 怎样避免使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK之后的黑屏问题

    在自己的项目中.我须要使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK来開始新的activity同一时候移除之前全部的 ...

  8. MongoDB 2.6安装

    Workaround to install as a service You can manually install 2.6.0 as a service on Windows from an Ad ...

  9. iOS:编译错误[__NSDictionaryM objectAtIndexedSubscript:]: unrecognized selector sent to instance 0xa79e61

    这个意思是,__NSDictionaryM  无法将值传到下标索引对象,言简意赅就是数组越界.可是再看看,这是数组吗?不是,所以.遇到这样的crash,我这里有两种情况: 1.首先看看你 indexP ...

  10. win10 bcdedit加入vhdx启动

    第一步,先用hyper-v.imagex或者其他vhd安装器.将win10 系统安装到一个vhd文件里(vhdx更好.动态扩展等诸多优良特性).比方d:\win10tp.vhdx 第二步,运行例如以下 ...