hdu4099】的更多相关文章

Revenge of Fibonacci Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 204800/204800 K (Java/Others) Total Submission(s): 2582    Accepted Submission(s): 647 Problem Description The well-known Fibonacci sequence is defined as following: Here w…
要想通这个题目应该很容易,由于斐波纳契数在近100项之后很大,早就超出long long了.而输入最长的序列才40个数字,所以大约保留前50位,前40位是没有误差的!!!其实,想想我们判断double数字相等时fabs(a-b)<1e-10来忽略double数字由于加法带来的误差,道理是一样的,甚至C++默认的还是1e-5.而保险起见,我的方法中保留了100位.当然这个保留50位的数字加法,也只能模拟一遍,因为要计算10^5项. 然而测试样例有50000组,所以我们先要对输入的字符串做一个字典树…
题目:Revenge of Fibonacci 题意:给出斐波那契数列的前k位,k不超过40,找出最小的正整数n,满足F(n)的前k位与给定数的前k位相同,斐波那契数列的项数不超过100000. 解析:本题可以分为两步: 第一步就是预处理出100000项斐波那契数列的前40位,插入到字典树中. 第二步就是查询匹配求最小的n. 对于第一步,我们可以把斐波那契数列精确到50多位,然后只存40位即可,这样就防止进位的误差.在斐波那契数列加法过程中,我们只把它的前50多 位进行相加,不然存不下. #in…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4099 思想很容易想到 就是预处理出前10w个的fib数,然后建树查询 建树时只用前40位即可,所以在计算时只用截取前60位 但是我在截取时总是出错 后来看了别人的代码改了一下就对了 不过还是不知道为什么那样是对的 更改地方在代码: #include<iostream> #include<cstdlib> #include<cstdio> #include<cstrin…
题目: Revenge of Fibonacci 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4099 分析:字典树的应用.在求Fibonacci的前40位时,可以只记录下前60位,舍去后面的,这样不会因为进位而产生误差. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<string> #…
题意:给定fibonacci数列,输入前缀,求出下标.题目中fibonacci数量达到100000,而题目输入的前缀顶多为40位数字,这说明我们只需要精确计算fibinacci数前40位即可.查询时使用字典树.在计算时,为了保证前40位精确无误.在此我计算了前60位.以保证前面不在进位. 注意点: 1)关于表示进位问题,需要控制计算的数位数在60以内,切记计算时不要错位(相同位要对齐). 2)坑点:题目给出的数插入字典树最好插入前40位即可,否则MLE. 3)坑点:题目只要求计算下标不超过100…
题目链接:https://vjudge.net/problem/HDU-4099 题意:给T组询问,每个询问为一个字符串(长度<=40),求以该字符串为开始的fibonacci数列的第一个元素的下标,如果在前100000项里都没有,输出-1. 思路: 首先是fibonacci数列这一部分,要用高精度先处理出前1e5项,但显然不能保留每一项的所有位,因为前缀只有40位,我们也只需要计算数列的前40位,为了保证前40位的正确,我计算到了70位. 然后是字典树记录前缀,字典树大概最多40层,空间1e7…