hdu 4099 字典树 + 斐波那契
题意:
给你一个串(最长40位)问你这个串是斐波那契F(n) n <= 99999中的那个数的前缀,如果存在多个输出最小的n否则输出-1.
思路:
给的串最长40位,那么就直接把所有的斐波那契全求出来(每个要前40位,求
的时候多求几位,省着精度出问题,不能全求出来,存不下)求出来后把他们建在一颗字典树里面,建树的时候注意开一个变量记住当前位置的这个字母最早出现的是第几个斐波那契数,然后对于每组询问,直接查找就行了。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Tree
{
Tree *next[10];
int v;
}Tree; Tree root; void Buid_Tree(char *str ,int vv)
{
int len = strlen(str);
Tree *p = &root ,*q;
for(int i = 0 ;i < len ;i ++)
{
int id = str[i] - '0';
if(p -> next[id] == NULL)
{
q = (Tree *) malloc(sizeof(root));
q -> v = vv;
for(int j = 0 ;j < 10 ;j ++)
q -> next[j] = NULL;
p -> next[id] = q;
p = p -> next[id];
}
else p = p -> next[id];
}
} int Find(char *str)
{
int len = strlen(str);
Tree *p = &root;
for(int i = 0 ;i < len ;i ++)
{
int id = str[i] - '0';
if(p -> next[id] == NULL) return -1;
p = p -> next[id];
}
return p -> v;
} void Buid()
{
int a[80] ,b[80] ,c[80];
char str[60];
for(int i = 0 ;i < 10 ;i ++)
root.next[i] = NULL;
str[0] = '1' ,str[1] = '\0';
Buid_Tree(str ,0);
memset(a ,0 ,sizeof(a));
memset(b ,0 ,sizeof(b));
memset(c ,0 ,sizeof(c));
a[1] = b[1] = 1;
for(int i = 2 ;i < 100000 ;i ++)
{
for(int j = 1 ;j <= 60 ;j ++)
c[j] = a[j] + b[j];
for(int j = 1 ;j <= 60 ;j ++)
c[j+1] += c[j] / 10 ,c[j] %= 10;
int max = 0;
for(int j = 60 ;j >= 1 ;j --)
if(c[j])
{
max = j; break;
}
int k = 0;
for(int j = max ;j >= 1 ;j --)
{
str[k++] = c[j] + '0';
if(k == 40) break;
}
str[k] = '\0';
Buid_Tree(str ,i);
if(max > 55)
{
for(int j = 6 ;j <= 60 ;j ++)
b[j - 5] = b[j] ,c[j - 5] = c[j];
for(int j = 56 ;j <= 60 ;j ++)
b[j] = c[j] = 0;
}
for(int j = 1 ;j <= 60 ;j ++)
{
a[j] = b[j];
b[j] = c[j];
c[j] = 0;
}
}
} int main ()
{
int t ,cas = 1;
char str[50];
Buid();
scanf("%d" ,&t);
while(t--)
{
scanf("%s" ,str);
printf("Case #%d: %d\n" ,cas ++ ,Find(str));
}
return 0;
}
hdu 4099 字典树 + 斐波那契的更多相关文章
- hdu 4983 线段树+斐波那契数
http://acm.hdu.edu.cn/showproblem.php?pid=4893 三种操作: 1 k d, 修改k的为值增加d 2 l r, 查询l到r的区间和 3 l r, 从l到r区间 ...
- [Codeforces 316E3]Summer Homework(线段树+斐波那契数列)
[Codeforces 316E3]Summer Homework(线段树+斐波那契数列) 顺便安利一下这个博客,给了我很大启发(https://gaisaiyuno.github.io/) 题面 有 ...
- Codeforces 446-C DZY Loves Fibonacci Numbers 同余 线段树 斐波那契数列
C. DZY Loves Fibonacci Numbers time limit per test 4 seconds memory limit per test 256 megabytes inp ...
- 【CF446C】DZY Loves Fibonacci Numbers (线段树 + 斐波那契数列)
Description 看题戳我 给你一个序列,要求支持区间加斐波那契数列和区间求和.\(~n \leq 3 \times 10 ^ 5, ~fib_1 = fib_2 = 1~\). Solut ...
- hdu number number number 斐波那契数列 思维
http://acm.hdu.edu.cn/showproblem.php?pid=6198 F0=0,F1=1的斐波那契数列. 给定K,问最小的不能被k个数组合而成的数是什么. 赛后才突然醒悟,只要 ...
- [莫队算法 线段树 斐波那契 暴力] Codeforces 633H Fibonacci-ish II
题目大意:给出一个长度为n的数列a. 对于一个询问lj和rj.将a[lj]到a[rj]从小到大排序后并去重.设得到的新数列为b,长度为k,求F1*b1+F2*b2+F3*b3+...+Fk*bk.当中 ...
- HDOJ/HDU 5686 Problem B(斐波拉契+大数~)
Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种 ...
- HDU 1568 快速求斐波那契前四位
思路: 把斐波那契通项公式转化成log的形式,高中数学... //By SiriusRen #include <bits/stdc++.h> using namespace std; ], ...
- HDU4099(斐波那契数列与字典树)
题目:Revenge of Fibonacci 题意:给出斐波那契数列的前k位,k不超过40,找出最小的正整数n,满足F(n)的前k位与给定数的前k位相同,斐波那契数列的项数不超过100000. 解析 ...
随机推荐
- Java实现文件的读写
需求:实现基本的读写 package com.sbx.io; import java.io.File; import java.io.FileReader; import java.io.FileWr ...
- HDOJ-1686(KMP算法)
Oulipo HDOJ-1686 本题的思路就是KMP,和HDOJ-1711思路一样,不再赘述详情可以看链接:1711题解 #include<iostream> #include<c ...
- Docker搭建HAproxy+tomcat 实现高可用
构建业务镜像1创建tomcat-app1和tomcat-app2两个目录,代表不同的两个基于tomcat的业务.准备tomcat的配置文件[root@localhost ~]#mkdir -p /da ...
- Java数据类型拓展
public class Demo03 { public static void main(String[] args) { //整数拓展: 二进制0b 十进制 八进制0 十六进制0x int i = ...
- C#的常见集合接口提供的功能
C#的常见集合接口提供的功能 这里的功能都是泛型版本的常见功能,列出来,也许后面用得上吧,没有放非泛型版本,因为觉得用得不多,也就没有整理 IEnumerable<T> ICollecti ...
- CRLF注入漏洞 -配置错误
漏洞分析参考 https://i-beta.cnblogs.com/posts/edit 什么是CRLF? CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII ...
- JSP, EL, JSTL的使用
JSP基础指令和语法 回顾 在Jsp页面: 只要是Java代码就会原封不动的输出, 如果是html代码,就会转义为 out.write("<html>\r\n") 这样 ...
- linux下 > /dev/null 2 > &1 的意思和如何在后台启动进程
一.几个基本符号及其含义 之前看到别人写的一个shell脚本,有一个命令是:rm -f ${src_tmp_file} > /dev/null 2>&1 现在大概明白是什么意思了 ...
- IdentityServer4是什么
1 什么是IdentityServer4? IdentityServer4是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架. 2 什么是OAuth 2.0? OAu ...
- HTML特殊标签
一,HTML特殊标签 二,换行标签 <br>标签用来将内容换行,其在HTML网页上的效果相当于我们平时使用word编辑文档时使用回车换行. 三,分割线 <hr>标签用来在HTM ...