hdu 4099 Revenge of Fibonacci 字典树+大数
将斐波那契的前100000个,每个的前40位都插入到字典树里(其他位数删掉),然后直接查询字典树就行。
此题坑点在于
1、字典树的深度不能太大,事实上,超过40在hdu就会MLE……
2、若大数加法时,保存的位数过少,就会导致低位误差,累积起来就可能导致前40位产生错误,解决办法是提高精度。
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std; struct Trie
{
struct Trie *son[10];
int id;
}*root;
void insert(char s[],int ID)
{
int i,j;
struct Trie *c,*newnode;
c=root;
for(i=0;s[i];i++)
{
if(c->son[s[i]-'0'])
{
c=c->son[s[i]-'0'];
}
else
{
c->son[s[i]-'0']=new Trie;
for(j=0;j<10;j++) c->son[s[i]-'0']->son[j]=0;
c=c->son[s[i]-'0'];
c->id=ID;
}
}
}
int find(char *s)
{
int i;
int len;
struct Trie *c;
len=strlen(s);
if(len==0) return 0;
c=root;
for(i=0;i<len;i++)
{
if(c->son[s[i]-'0']!=0)
{
c=c->son[s[i]-'0'];
}
else
return -1;
}
return c->id;
}
void init()
{
root=new Trie;
for(int i=0;i<10;i++) root->son[i]=0;
}
char a[60]="1",b[60]="1",c[60];
int main()
{
char str[50];
int cas;
int ca=1;
init();
insert("1",0);
int la=1;
int lb=1;
for(int i=2;i<100000;i++)
{
int len=max(la,lb);
int x=0;
int top=0;
for(int j=0;j<len;j++)
{
if(j>=la) a[j]='0';
int s=x+a[j]+b[j]-2*'0';
x=s/10;
c[top++]=s%10+'0';
}
if(x) c[top++]=x+'0';
c[top]='\0';
if(top>50) //计算数列的精度必须大一些
{
for(int j=0;j<49;j++) a[j]=b[j+1];a[la=49]='\0';
for(int j=0;j<50;j++) b[j]=c[j+1];
b[lb=50]='\0';
}
else
{
la=lb;
strcpy(a,b);
strcpy(b,c);
lb=top;
}
int j,c;
for(j=lb-1,c=0;j>=0&&c<40;c++,j--) str[c]=b[j];str[c]='\0';//字典树的深度绝对不能太大,超过40就要MLE!
insert(str,i);
}
// cout<<"ok"<<endl;
cin>>cas;
while(cas--)
{
scanf("%s",str);
printf("Case #%d: %d\n",ca++,find(str));
}
return 0;
}
hdu 4099 Revenge of Fibonacci 字典树+大数的更多相关文章
- hdu 4099 Revenge of Fibonacci Trie树与模拟数位加法
		Revenge of Fibonacci 题意:给定fibonacci数列的前100000项的前n位(n<=40);问你这是fibonacci数列第几项的前缀?如若不在前100000项范围内,输 ... 
- UVa 12333 Revenge of Fibonacci (字典树+大数)
		题意:给定一个长度小于40的序列,问你那是Fib数列的哪一项的前缀. 析:首先用大数把Fib数列的前100000-1项算出来,注意,一定不能是100000,要不然会WA的,然后每个数取前40位,不足4 ... 
- 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 Problem Description The well-known Fibonacci sequence is defined as following: ... 
- HDU 4099 Revenge of Fibonacci (数学+字典数)
		传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4099 这个题目就是一个坑或. 题意:给你不超过40的一串数字,问你这串数字是Fibonacci多少的开头 ... 
- hdu4099 Revenge of Fibonacci 字典树
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4099 思想很容易想到 就是预处理出前10w个的fib数,然后建树查询 建树时只用前40位即可,所以在计 ... 
- HDU 4287 Intelligent IME(字典树数组版)
		Intelligent IME Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ... 
- HDU 4757 Tree 可持久化字典树
		Tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4757 Des ... 
随机推荐
- 1050 数的计数 c语言实现
			描述 给定一个正整数,求其各位之和. 输入 输入一行,为一个正整数(最多10,000位). 输出 输出各位之和. 样例输入 17 样例输出 8 解析:这题主要是大数计算的问题,因为10000位的数无法 ... 
- CXF之八  RESTFul服务
			JAX-RS概述 JAX-RS是Java提供用于开发RESTful Web服务基于注解(annotation)的API.JAX-RS旨在定义一个统一的规范,使得Java程序员可以使用一套固定的接口来开 ... 
- wireshark tcp 协议分析 z
			虽然知道wireshark是抓包神器,只会大概大概用一下,还用一下下tcpdump,略懂一点BPF过滤器,也知道一点怎么用 wirkshark过滤相关的报文,但是对于详细的字段的含义,如何查看TCP的 ... 
- Team them up!
			题意: 给出n个人以及认识其他人的情况,现在要把所有人分成两队,每队至少一人,求使两队人数差距最小且每队内部的人都相互认识的分队情况. 分析: 这道题让我学习到了不少,首先看到使差距最小就想到了背包, ... 
- 从python的yield说起
			前段时间在读trac 中wiki模块的源码的时候,发现了很多地方都使用了yiled这一关键词, 感觉是在需要返回某个值的地方通过yield来代替return, 不是很明白其用法,所以仔细研究下. 一个 ... 
- gcc编译器与基本类型3
			C语言发展史 1969年贝尔实验室 肯尼斯·蓝·汤普逊,丹尼斯·李奇开发了B语言 ->Unix,New B语言,改名C语言83年提出C语言标准 1989年十二月正式通过C语言标准,C89标准 C ... 
- 【暑假】[实用数据结构]UVa11991 Easy Problem from Rujia Liu?
			UVa11991 Easy Problem from Rujia Liu? 思路: 构造数组data,使满足data[v][k]为第k个v的下标.因为不是每一个整数都会出现因此用到map,又因为每 ... 
- stl+模拟 CCF2016 4 路径解析
			// stl+模拟 CCF2016 4 路径解析 // 一开始题意理解错了.... #include <iostream> #include <string> #include ... 
- Tkinter教程之Listbox篇
			本文转载自:http://blog.csdn.net/jcodeer/article/details/1811310 #Tkinter教程之Listbox篇#Listbox为列表框控件,它可以包含一个 ... 
- [转]JQuery.Ajax之错误调试帮助信息
			下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求 ... 
