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

思想很容易想到

就是预处理出前10w个的fib数,然后建树查询

建树时只用前40位即可,所以在计算时只用截取前60位

但是我在截取时总是出错

后来看了别人的代码改了一下就对了

不过还是不知道为什么那样是对的

更改地方在代码:

 #include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#define maxn 110
using namespace std;
char s[];
char c[];
char s1[maxn],s2[maxn],s3[maxn];
void add(char *s1,char *s2, char *s3)//大数加
{
int len1=strlen(s1)-;
int len2=strlen(s2)-;
int up=;
int x=,y=;
int k=;
int z=;
while(len1>= || len2>=)
{
if(len1<) x=;
else x=s1[len1]-'';
if(len2<) y=;
else y=s2[len2]-''; z=x+y+up; c[k++]=z%+'';
up=z/;
len1--;
len2--;
} if(up>) c[k++]=up+'';
for(int i=;i<k;i++)
s3[i]=c[k--i];
s3[k]='\0';
}
class node
{
public:
int ID;
node *next[]; };
node *root=new node;
void insert_node(char *s, int num)
{
node *p=root; for(int i=;s[i]&&i<;i++)
{
if(p->next[s[i]-'']==NULL)
{
node *temp=new node;
for(int j=;j<;j++)
temp->next[j]=NULL;
temp->ID=-;
p->next[s[i]-'']=temp; }
p=p->next[s[i]-'']; if(p->ID<) p->ID=num;
}
}
void init()
{
node *q=root;
for(int i=;i<;i++)
q->next[i]=NULL;
q->ID=-; s1[]='';s1[]='\0';
s2[]='';s2[]='\0'; insert_node(s1,);
insert_node(s2,); for(int i=;i<;i++)
{
int len1=strlen(s1);
int len2=strlen(s2);
if(len2>) // 防止进位出错,但是不知道为什么这样就可以防止了。。。。。
{
s2[len2-]='\0';
s1[len1-]='\0';
} //我自己曾经的方法
/*
if(len2>60) s2[len2-1]='\0';
if(len1>60) s1[len1-1]='\0'; */ add(s1,s2,s3);
insert_node(s3,i); strcpy(s1,s2);
strcpy(s2,s3); }
}
int find(char *s)
{
node* q=root;
int num;
int len=strlen(s);
for(int i=;i<len;i++)
{
int d=s[i]-''; if(q->next[d]==NULL) return -;
else
{
q=q->next[d];
num=q->ID;
}
}
return num;
}
void del_node(node *p)
{
for(int i=;i<;i++)
{
if(p->next[i]!=NULL)
del_node(p->next[i]); }
free(p); }
int main()
{
int t;
init(); scanf("%d",&t);
int iCase=;
while(t--)
{ scanf("%s",s);
printf("Case #%d: %d\n",++iCase,find(s));
}
del_node(root);
return ;
}

hdu4099 Revenge of Fibonacci 字典树的更多相关文章

  1. hdu 4099 Revenge of Fibonacci 字典树+大数

    将斐波那契的前100000个,每个的前40位都插入到字典树里(其他位数删掉),然后直接查询字典树就行. 此题坑点在于 1.字典树的深度不能太大,事实上,超过40在hdu就会MLE…… 2.若大数加法时 ...

  2. UVa 12333 Revenge of Fibonacci (字典树+大数)

    题意:给定一个长度小于40的序列,问你那是Fib数列的哪一项的前缀. 析:首先用大数把Fib数列的前100000-1项算出来,注意,一定不能是100000,要不然会WA的,然后每个数取前40位,不足4 ...

  3. HDU4099 Revenge of Fibonacci(高精度+Trie)

    Revenge of Fibonacci Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 204800/204800 K (Java/ ...

  4. hdu 4099 Revenge of Fibonacci Trie树与模拟数位加法

    Revenge of Fibonacci 题意:给定fibonacci数列的前100000项的前n位(n<=40);问你这是fibonacci数列第几项的前缀?如若不在前100000项范围内,输 ...

  5. hdu4099 Revenge of Fibonacci

    题意:给定fibonacci数列,输入前缀,求出下标.题目中fibonacci数量达到100000,而题目输入的前缀顶多为40位数字,这说明我们只需要精确计算fibinacci数前40位即可.查询时使 ...

  6. HDU 4099 Revenge of Fibonacci(高精度+字典树)

    题意:对给定前缀(长度不超过40),找到一个最小的n,使得Fibonacci(n)前缀与给定前缀相同,如果在[0,99999]内找不到解,输出-1. 思路:用高精度加法计算斐波那契数列,因为给定前缀长 ...

  7. UVA - 12333 Revenge of Fibonacci 高精度加法 + 字典树

    题目:给定一个长度为40的数字,问其是否在前100000项fibonacci数的前缀 因为是前缀,容易想到字典树,同时因为数字的长度只有40,所以我们只要把fib数的前40位加入字典树即可.这里主要讨 ...

  8. UVa 12333 - Revenge of Fibonacci manweifc(模拟加法竖式 & 字典树)

    题意: 给定n个(n<=40)数字, 求100000个以内有没有前面n个数字符合给定的数字的fibonacci项, 如果有, 给出最小的fibonacci项, 如果没有, 输出-1. 分析: 可 ...

  9. UVA-12333 Revenge of Fibonacci(竖式加法模拟 & 字典树)

    题目: 给出一个斐波那契数字的前缀,问第一个有这个前缀的数字在斐波那契数列中是第几个. 思路: 紫书提示:本题有一定效率要求.如果高精度代码比较慢,可能会超时. 利用滚动数组和竖式加法来模拟斐波那契相 ...

随机推荐

  1. Python 一些有趣的技巧哦!

    #Python 技巧命令 python 如一股清流,可以说屌到飞起,下面咱就来看看一些屌的东西 ### python2 最简单的web服务 ` python -m SimpleHTTPServer 8 ...

  2. 老李案例分享:Weblogic性能优化案例

    老李案例分享:Weblogic性能优化案例 POPTEST的测试技术交流qq群:450192312 网站应用首页大小在130K左右,在之前的测试过程中,其百用户并发的平均响应能力在6.5秒,性能优化后 ...

  3. JavaScript 数组操作方法

    这些数组的操作方法会改变原来的数组.在使用 Vue 或者 Angular 等框架的时候会非常实用,使用这些方法修改数组会触发视图的更新. Array.prototype.push 该方法可以在数组末尾 ...

  4. JSP带有属性的自定义标签

    新建HelloWelTag类 如何添加jsp-api.jar包 HelloWelTag类详细代码```package bid.zhazhapan.fims.tag;import java.io.IOE ...

  5. Mybatis基础学习(三)—映射文件

    一.输入映射 1.parameterType     指定输入参数的Java类,可以使用别名或者类的全限定名.它也可以接受基本数据类型.POJO对象.HashMap.   (1)基本数据类型   (2 ...

  6. Unity编译Android的原理解析和apk打包分析

    作者介绍:张坤 最近由于想在Scene的脚本组件中,调用Android的Activity的相关接口,就需要弄明白Scene和Activity的实际对应关系,并对Unity调用Android的部分原理进 ...

  7. java 基础知识六 字符串1

    java  基础知识六  字符串1 String 不是java的基本数据类型 String 不是java的基本数据类型 String 不是java的基本数据类型 字符串是是一个字符序列 1.创建 创建 ...

  8. 前后端分离之vue2.0+webpack2 实战项目 -- webpack介绍

    webpack的一点介绍 Webpack 把任何一个文件都看成一个模块,模块间可以互相依赖(require or import),webpack 的功能是把相互依赖的文件打包在一起.webpack 本 ...

  9. 使用react native制作的一款网络音乐播放器

    使用react native制作的一款网络音乐播放器 基于第三方库 react-native-video设计"react-native-video": "^1.0.0&q ...

  10. php最新微信扫码在线支付接口。ecshop和shopex,shopnc下完美无错

    最近为客户的一个在线商城做了一个微信扫码在线支付的接口.跟大家分享一下. 1 首先可以模仿其他的接口,比如支付宝,财付通等的接口,构建模块功能文件和语言文件.2 微信提供2种扫码方式,大家可以根据自己 ...