题目链接: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. CSS.05 -- 规避脱标 定位的盒子居中、CSS标签规范、溢出隐藏、内容移除(网页优化)、CSS精灵图

    规避脱标   定位的盒子居中显示 Margin:0 auto : 只能让标准流的盒子居中对齐 当A是B的父系,B可以使用 margin-left:auto: 来获得相当于定位right:0:的效果 M ...

  2. 常见排序算法-Python实现

    常见排序算法-Python实现 python 排序 算法 1.二分法     python    32行 right = length-  :  ]   ):  test_list = [,,,,,, ...

  3. 兔子生娃问题---函数递归应用--c语言实现

    事情是这样的:在很久很久以前....有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 兔子的规律为数列:1, 1 ...

  4. win32最简单的htmlayout图形界面demo

    1,下载HTMLayoutSDK,放在workspace. SDK下载地址:http://www.terrainformatica.com/htmlayout/HTMLayoutSDK.zip 2,v ...

  5. icheck样式绑定与翻页保持

    官方文档:http://icheck.fronteed.com/ 使用基本样式 $('input').iCheck({ checkboxClass : 'icheckbox_square-blue', ...

  6. C#重的数组、集合(ArrayList)、泛型集合(list<T>)三者比较及扩展延伸……

    本来我只想总结下数组.集合(ArrayList).泛型集合(list<T>)三者的比较的,可以一写下来要扩展的知识点有点多了,只能写一个小的知识点列表了如下: 1.数组.集合(ArrayL ...

  7. iOS各框架功能简述以及系统层次结构简单分析

    iOS各个框架所对应的功能简单介绍 iOS系统结构层次:

  8. vue router-link 上添加点击事件

    在vue学习中遇到给router-link 标签添加事件@click .@mouseover等无效的情况 我想要做的是鼠标移上去出现删除标签,移除标签消失的效果 原代码: <router-lin ...

  9. MongDB系列(一):使用node.js连接数据库

    1.首先启动mongodb数据库服务器 2.创建app.js,代码如下: /** * Created by byzy on 2016/8/18. * node.js 连接 mongodb实例 */ / ...

  10. Extjs6官方文档译文——应用架构简介(MVC,MVVM)

    应用架构简介 Extjs 同时提供对于MVC和MVVM应用架构的支持.这两个架构方式共享某些概念,而且都旨在沿着逻辑层面划分应用程序代码.每种方法在选择如何划分应用组件上都有其各自的优势. 本指南的目 ...