题目:

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>
#include<algorithm>
#include<map>
#define maxn 6000005
using namespace std;
char s[],s1[],s2[],s3[];
char c[];
int ans=;
void padd(char *a,char *b,char *back)
{
int i,j,k,x,y,z,up;
i=strlen(a)-;
j=strlen(b)-;
k=;
up=;
while(i>=||j>=)
{
if(i<)x=;
else x=a[i]-'';
if(j<)y=;
else y=b[j]-'';
z=x+y+up;
c[k++]=z%+'';
up=z/;
i--;
j--;
}
if(up>)c[k++]=up+'';
for(i=;i<k;i++)back[i]=c[k--i];
back[k]='\0';
} struct Trie
{
Trie *next[];
int count;
};
Trie *root,memory[maxn];
int cnt=;
Trie* build()
{
Trie *p=&memory[cnt++];
p->count=-;
for(int i=;i<;i++)
p->next[i]=NULL;
return p;
}
void insert_node(char *s,int nn)
{
Trie *p=root;
int i,k;
for(i=;s[i]&&i<;i++)
{
k=s[i]-'';
if(p->next[k]==NULL)
p->next[k]=build();
p=p->next[k];
if(p->count==-)p->count=nn;
}
}
bool search(char *s)
{
Trie *p=root;
int i,k;
for(i=;s[i];i++)
{
k=s[i]-'';
if(p->next[k]==NULL)return false;
else p=p->next[k];
}
ans=p->count;
return true;
}
void init()
{
s1[]='';s1[]='\0';
s2[]='';s2[]='\0';
insert_node(s1,);
insert_node(s2,);
for(int i=;i<=;i++)
{
int len1=strlen(s1),len2=strlen(s2);
if(len2>)
{
s2[len2-]='\0';
s1[len1-]='\0';
}
padd(s1,s2,s3);
strcpy(s1,s2);
strcpy(s2,s3);
insert_node(s3,i);
}
}
int main()
{
int T,cas=;
root=build();
init();
scanf("%d",&T);
while(T--)
{
scanf("%s",s);
bool flag=search(s);
printf("Case #%d: ",cas++);
if(!flag)puts("-1");
else printf("%d\n",ans-);
}
return ;
}

HDU--4099的更多相关文章

  1. HDU 4099 Revenge of Fibonacci (数学+字典数)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4099 这个题目就是一个坑或. 题意:给你不超过40的一串数字,问你这串数字是Fibonacci多少的开头 ...

  2. (字典树)Revenge of Fibonacci -- HDU -- 4099

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4099 要用c++交哦, G++ MLE 不是很懂,先粘上慢慢学习 代码: #include<std ...

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

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

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

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

  5. hdu 4099 Revenge of Fibonacci 大数+压位+trie

    最近手感有点差,所以做点水题来锻炼一下信心. 下周的南京区域赛估计就是我的退役赛了,bless all. Revenge of Fibonacci Time Limit: 10000/5000 MS ...

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

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

  7. HDU 4099 大数+Trie

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

  8. HDU 4099 Revenge of Fibonacci Trie+高精度

    Revenge of Fibonacci Problem Description The well-known Fibonacci sequence is defined as following: ...

  9. hdu 4099 字典树 + 斐波那契

    题意:       给你一个串(最长40位)问你这个串是斐波那契F(n)  n <= 99999中的那个数的前缀,如果存在多个输出最小的n否则输出-1. 思路:       给的串最长40位,那 ...

  10. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. 【quickhybrid】Android端的项目实现

    前言 前文中就有提到,Hybrid模式的核心就是在原生,而本文就以此项目的Android部分为例介绍Android部分的实现. 提示,由于各种各样的原因,本项目中的Android容器确保核心交互以及部 ...

  2. HTML基础学习总结

    一.HTML的一些基本描述 全称:Hyper Text Markup Language 定义:超文本标记语言,是标记语言而不是编程语言,使用标记标签来描述网页,所以也被称为网页 格式:标签对里面放纯文 ...

  3. Scrum Meeting 11.08

    成员 今日任务 明日计划 用时 徐越       赵庶宏       薄霖       卞忠昊 WebView和JavaScript交互基础 Bitmap(位图)全解析 Part1 3h  武鑫 设计 ...

  4. 2018-2019-20172329 《Java软件结构与数据结构》第六周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第六周学习总结 学无止境,希望自己可以坚持下去,就算自己有太多的事情也不希望自己落下学习,也希望自己可以活成自己想要的样 ...

  5. 20162319 实验四 Android程序设计

    Android Stuidio的安装测试: 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号 ·实验过程 完成任务一,只需在Android应用程序文件 ...

  6. TCP/IP Illustrated Vol1 Second Edition即英文版第二版,TCP部分个人勘误

    目前已经有了英文版第二版的TCPIP详解,中文版暂时还没有,但是英文版还是有好几处错误,作者和官方竟然没有维护一个勘误表. 个人阅读过程中针对TCP部分可能有问题的地方简单勘误一下 P596:示意图中 ...

  7. Java网络编程二:Socket详解

    Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...

  8. servlet跳转问题

    <!-- 相对路径访问 第一个/表示服务器的根目录--> <a href="servlet/o1">访问01/src/servlet/01.java< ...

  9. Hive如何加载和导入HBase的数据

    当我们用HBase 存储实时数据的时候, 如果要做一些数据分析方面的操作, 就比较困难了, 要写MapReduce Job. Hive 主要是用来做数据分析的数据仓库,支持标准SQL 查询, 做数据分 ...

  10. cxGrid 单元格回车移到下一行,当移到最后一个单元格时回车新增一行【转】

    1 在TcxGridDBTableView中,设定属性 NewItemRow.Visible = True 2 在cxgrid中输入数据怎样回车换行  在TcxGridDBTableView中  将属 ...