题目:

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. ms cms

    很多开源CMS,都是半开源或假开源. 看看微软的CMS怎么样吧.这么著名的CMS,下载网址不好找. https://orchard.codeplex.com/SourceControl/latest

  2. 8.openldap mirrormode(主主同步)

    作者:yaoyao #MirrorMode双主模式 1.主机: ldap01.liuyao.com ldap02.liuyao.com 2.搭建LDAP服务 搭建过程省略,保证2台服务器部署配置一样即 ...

  3. ansible软件2

    常用软件安装及使用目录  ansible使用1 第1章 copy模块 1.1 创建文件及写入内容 1. [root@m01 scripts]# ansible oldboy -m copy -a &q ...

  4. sprint2(第六天)

    昨天休息一天,今天继续做任务. 燃尽图:

  5. Daily Scrum (2015/11/6)

    今晚除了玉钟焕的其他成员在一起开了个短会.讨论有关添加新功能以及一些BUG问题.由于时间原因,我们本想把动态爬取功能留到第二个迭代中,但是现在目前时间还够,我们便一起对这一功能的讨论和实现进行分析. ...

  6. Scrum Meeting 11.07

    成员 今日任务 明日计划 用时 徐越       赵庶宏       薄霖       卞忠昊 JOSN数据解析 WebView和JavaScript交互基础  3h  武鑫 设计界面:独立完成一些简 ...

  7. IO异常 的处理

    package com.throwsss; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFou ...

  8. ssh结合使用

    springxml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=& ...

  9. Promise 记录

  10. rpm安装和二进制安装

    rpm包安装 Tomcat RPM安装(先安装JDK + 再安装Tomcat) 1:升级系统自带的JDK(也可以使用oracle的JDK) yum install -y java-1.8.0-open ...