hdu5351
题目名称: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的代码
代码例如以下:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int t;
while(in.hasNext())
{
t=in.nextInt();
for(int pp=0;pp<t;pp++)
{
BigInteger n,m,sum=BigInteger.ONE;
BigInteger cnt=BigInteger.ZERO;
BigInteger ss[] = new BigInteger[3];
ss[1]=BigInteger.ONE;ss[0]=BigInteger.ONE;
cnt=new BigInteger("4");
n = in.nextBigInteger();
m = in.nextBigInteger();
BigInteger two = new BigInteger("2");
if(new BigInteger("3").compareTo(m)==1) //m<3
System.out.println("0");
else{
for(;;)
{
ss[2]=ss[1].add(ss[0]);
if(( (cnt.add(ss[2].add(ss[2]))).compareTo(m) ) ==1) //cnt+ss[2]*2>m
break;
cnt=cnt.add(ss[2].add(ss[2])); //cnt=cnt+ss[2]*2
sum=(sum.add(ss[2])).mod(new BigInteger("258280327")); //sum=(sum+ss[2])%258280327
ss[0]=ss[1];
ss[1]=ss[2];
}
if(m.subtract(cnt).compareTo(ss[2])==1)
System.out.println( (m.subtract(ss[2]).add(sum).subtract(cnt)).mod(new BigInteger("258280327")));
else
System.out.println( (m.add(sum).subtract(cnt) ) .mod(new BigInteger("258280327")));
// if(m-cnt>ss[2])
// cout<<(m-ss[2]+sum-cnt)%258280327<<endl;
// else
// cout<<(m+sum-cnt)%258280327<<endl;
// }
}
}
}
}
}
hdu5351的更多相关文章
- hdu5351 MZL's Border(规律题,java)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud MZL's Border Time Limit: 2000/1000 MS (Ja ...
- HDU-5351
MZL's Border Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- [hdu5351]找规律,大整数模板
题意:f(1)="a",f(2)="b",f(i)=f(i-1)+f(i-2),"+"表示连接符.给定n,m,求f(n)的前m个字符的“ne ...
随机推荐
- Mysql 奇怪的连接错误
今天,碰到了一个数据库连接问题: 不像之前在linux上mysql连接问题,那是权限设置.而这次问题的起源是: 我想要往mysql导入csv文件,可是因为文件比較大.有88M数据:使用navicatc ...
- 为什么mysql中用\G表示按列方式显示
关于mysql的错误 - no query specified 学习了:http://blog.csdn.net/tenfyguo/article/details/7566941 sql语句可以用分号 ...
- http协议区分头信息和正文
http协议中的头信息和正文是採用空行分开,什么是空行呢?简单来说,就是\r\n\r\n. 所以将server返回的数据用\r\n\r\n分开后的结果,一个是头信息.一个是正文信息. C#的代码例如以 ...
- PDF转EPUB格式电子书经验总结
依据本人将PDF转换为EPUB电子书的经验,总结整理了这篇文章.因本人水平有限,难免有错误和不足之处,望大家及时批评指正. 写这篇文章时,假定读者已经会使用文中所列出软件的基本操作,比方如何用No ...
- UVALive 6663 Count the Regions 离散+bfs染色_(:зゝ∠)_
题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=4675">点击打开链接 gg.. ...
- 【为小白菜打call】
作为本校的竞赛生,我必须为我大OJ打call caioj,小白菜oj,顾名思义,就是为刚踏进OI的“小白菜”们准备的网站,里面包含了许多专题内容,各种模版和讲解视频 而且对于刚学习C++的同学,更有帮 ...
- 【POJ 1704】 Georgia and Bob
[题目链接] http://poj.org/problem?id=1704 [算法] 阶梯博弈 [代码] #include <algorithm> #include <bitset& ...
- HDU 5863 cjj's string game (矩阵乘法优化递推)
题目大意:用k种字符构建两个长度为n的字符串(每种字符有无限多个),要求对应位置字符相同的连续子串最长长度为m,问方法数. 其中k,n,m是输入,n(1<=n<=1000000000), ...
- mysql学习 2
1.建立外键 create table <表名>( <字段> 字段类型 not null, <字段> 字段类型 not null, <字段> 字段类型 ...
- 多年js学习累计总结
http://www.codesec.net/list/6/ 大神http://www.cnblogs.com/tylerdonet/p/5543813.html