HDU--4099
题目:
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的更多相关文章
- HDU 4099 Revenge of Fibonacci (数学+字典数)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4099 这个题目就是一个坑或. 题意:给你不超过40的一串数字,问你这串数字是Fibonacci多少的开头 ...
- (字典树)Revenge of Fibonacci -- HDU -- 4099
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4099 要用c++交哦, G++ MLE 不是很懂,先粘上慢慢学习 代码: #include<std ...
- hdu 4099 Revenge of Fibonacci 字典树+大数
将斐波那契的前100000个,每个的前40位都插入到字典树里(其他位数删掉),然后直接查询字典树就行. 此题坑点在于 1.字典树的深度不能太大,事实上,超过40在hdu就会MLE…… 2.若大数加法时 ...
- HDU 4099 Revenge of Fibonacci(高精度+字典树)
题意:对给定前缀(长度不超过40),找到一个最小的n,使得Fibonacci(n)前缀与给定前缀相同,如果在[0,99999]内找不到解,输出-1. 思路:用高精度加法计算斐波那契数列,因为给定前缀长 ...
- hdu 4099 Revenge of Fibonacci 大数+压位+trie
最近手感有点差,所以做点水题来锻炼一下信心. 下周的南京区域赛估计就是我的退役赛了,bless all. Revenge of Fibonacci Time Limit: 10000/5000 MS ...
- hdu 4099 Revenge of Fibonacci Trie树与模拟数位加法
Revenge of Fibonacci 题意:给定fibonacci数列的前100000项的前n位(n<=40);问你这是fibonacci数列第几项的前缀?如若不在前100000项范围内,输 ...
- HDU 4099 大数+Trie
Revenge of Fibonacci Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 204800/204800 K (Java/ ...
- HDU 4099 Revenge of Fibonacci Trie+高精度
Revenge of Fibonacci Problem Description The well-known Fibonacci sequence is defined as following: ...
- hdu 4099 字典树 + 斐波那契
题意: 给你一个串(最长40位)问你这个串是斐波那契F(n) n <= 99999中的那个数的前缀,如果存在多个输出最小的n否则输出-1. 思路: 给的串最长40位,那 ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
随机推荐
- 工程能力之C4模型
概述 刚在InfoQ上看到一篇介绍C4Model的文章,觉得这个模型设计的很赞,很有指导意义,做个简单的记录. Why,为什么需要架构图? ThoughtWorks中国 文章中有几句话我觉得很有道理, ...
- JavaScript设计模式-----模板方法模式
模板方法模式是一种只需要使用继承就可以实现的非常简单点的模式. 模板方法模式有两部分组成,第一部分是抽象父类,第二部分是具体的实现子类.通常在抽象父类中封装了子类的算法框架,包括实现 一些公共方法以及 ...
- jdk10 var定义变量的由来
百家号03-1714:11 题图:by jordhammond from instagram 本文选自聊聊架构公众号,略有修改 以前我们 Java 程序员经常会对其他语言中的 var 关键字耿耿于怀, ...
- ORM PHP 学习记录
ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射.为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却 ...
- centos下配置gitosis服务器遇到的困难
这篇博客主要讲的是在centos下配置gitosis遇到的问题. 背景:centos7.2 64 :gitosis2.0 1.困难1 1)产生的问题及原因.gitosis没有安装成功,没有出现fini ...
- Classifier
1.视频:https://morvanzhou.github.io/tutorials/machine-learning/keras/2-2-classifier/ 2.敲了代码,但是运行结果不懂,明 ...
- bing词典
一.bug寻找 bug1:点击单词挑战之后选择四级词汇,然后一直狂击答案,点到一个时候就会出现一个情况:不管点击哪一个选项都不会跳至下一题,而且屏幕上方的已做题目数 x/20中的x会乱跳. bug2: ...
- 团队作业7——第二次项目冲刺(Beta版本12.04——12.07)
1.当天站立式会议照片 本次会议在5号公寓3楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据项目要求还没做的完成. 2.每个人的工作 经过会议讨论后确定了每个人的分工 组员 任务 陈福鹏 实现 ...
- Linux操作系统(二)
SSD工作原理:http://www.360doc.com/content/15/0318/15/16824943_456186965.shtml HHD工作原理:http://blog.csdn.n ...
- [转帖]InfiniBand 主流厂商 和 产品分析
InfiniBand 主流厂商 和 产品分析 Mellanox成立于1999年,总部设在美国加州和以色列,Mellanox公司是服务器和存储端到端连接InfiniBand解决方案的领先供应商.20 ...