hdoj4099(字典树+高精度)
题目链接:https://vjudge.net/problem/HDU-4099
题意:给T组询问,每个询问为一个字符串(长度<=40),求以该字符串为开始的fibonacci数列的第一个元素的下标,如果在前100000项里都没有,输出-1。
思路:
首先是fibonacci数列这一部分,要用高精度先处理出前1e5项,但显然不能保留每一项的所有位,因为前缀只有40位,我们也只需要计算数列的前40位,为了保证前40位的正确,我计算到了70位。
然后是字典树记录前缀,字典树大概最多40层,空间1e7左右。
AC code:
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
using namespace std; int compare(string str1,string str2){
int len1=str1.length(),len2=str2.length();
if(len1<len2)
return -;
else if(len1>len2)
return ;
else
return str1.compare(str2);
} char c[];
void add(char *a,char *b,char *back)
{
int i = (int)strlen(a) - ,j = (int)strlen(b) - ;
int x = ,y = ,z = ,up = ,cnt = -;
while(i >= || j >= )
{
if(i < )x = ;
else x = a[i] - ''; if(j < )y = ;
else y = b[j] - ''; z = x + y + up;
c[++cnt] = z % + '';
up = z / ;
i--;j--;
}
if(up > )
c[++cnt] = up + '';
for(int i = ;i <= cnt;i++)
back[i] = c[cnt - i];
back[++cnt] = '\0';
} const int maxn=1e5+;
const int maxm=1e7+;
string str[];
char s[];
int tot,T,cas,cnt,trie[maxm][],key[maxm]; void insert(char* s,int k){
int len=min((int)strlen(s),),u=;
for(int i=;i<len;++i){
int t=s[i]-'';
if(!trie[u][t]){
++cnt;
key[cnt]=k;
trie[u][t]=cnt;
}
u=trie[u][t];
}
} int query(char *s){
int len=strlen(s),u=;
for(int i=;i<len;++i){
int t=s[i]-'';
if(!trie[u][t])
return -;
u=trie[u][t];
}
return key[u];
} void init()
{
tot = ;
char a[],b[],ans[];
a[] = b[] = '';a[] = b[] = ;
insert(b,);
for(int i = ;i < ;++i)
{
if(strlen(b) > )
{
b[strlen(b) - ] = ;
a[strlen(a) - ] = ;
}
add(a,b,ans);
insert(ans,i);
strcpy(a,b);
strcpy(b,ans);
}
} int main(){
init();
scanf("%d",&T);
while(T--){
scanf("%s",s);
printf("Case #%d: %d\n",++cas,query(s));
}
return ;
}
hdoj4099(字典树+高精度)的更多相关文章
- HDU 4099 Revenge of Fibonacci(高精度+字典树)
题意:对给定前缀(长度不超过40),找到一个最小的n,使得Fibonacci(n)前缀与给定前缀相同,如果在[0,99999]内找不到解,输出-1. 思路:用高精度加法计算斐波那契数列,因为给定前缀长 ...
- UVA - 12333 Revenge of Fibonacci 高精度加法 + 字典树
题目:给定一个长度为40的数字,问其是否在前100000项fibonacci数的前缀 因为是前缀,容易想到字典树,同时因为数字的长度只有40,所以我们只要把fib数的前40位加入字典树即可.这里主要讨 ...
- UVA - 12333 字典树+大数
思路:用字典树将前40个数字记录下来,模拟大数加法即可. AC代码 #include <cstdio> #include <cmath> #include <algori ...
- 【codevs3031】最富有的人(字典树)
网址:http://codevs.cn/problem/3031/ 这是蒟蒻写的第一道字典树……听说出市选题的神犇要出字符串,于是就赶紧滚去学了学(然而高精度算字符串算法?) 简单来说,字典树就是把一 ...
- UVA-12333 Revenge of Fibonacci(竖式加法模拟 & 字典树)
题目: 给出一个斐波那契数字的前缀,问第一个有这个前缀的数字在斐波那契数列中是第几个. 思路: 紫书提示:本题有一定效率要求.如果高精度代码比较慢,可能会超时. 利用滚动数组和竖式加法来模拟斐波那契相 ...
- 萌新笔记——用KMP算法与Trie字典树实现屏蔽敏感词(UTF-8编码)
前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"* ...
- [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
- 字典树+博弈 CF 455B A Lot of Games(接龙游戏)
题目链接 题意: A和B轮流在建造一个字,每次添加一个字符,要求是给定的n个串的某一个的前缀,不能添加字符的人输掉游戏,输掉的人先手下一轮的游戏.问A先手,经过k轮游戏,最后胜利的人是谁. 思路: 很 ...
- 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)
萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...
随机推荐
- 【一起来烧脑】一步Sass学会体系
[外链图片转存失败(img-G32u6UQ8-1563572536495)(https://upload-images.jianshu.io/upload_images/11158618-a03a58 ...
- 在Xilinx ISE中生成ROM时需要注意的事
在Xilinx ISE中生成ROM时,需要指定.coe文件.需要做到两件事.其一,要使用memory_initialization_radix= ; memory_initializatoin_vec ...
- 2019.11.11 模拟赛 T2 乘积求和
昨天 ych 的膜你赛,这道题我 O ( n4 ) 暴力拿了 60 pts. 这道题的做法还挺妙的,我搞了将近一天呢qwq 题解 60 pts 根据题目给出的式子,四层 for 循环暴力枚举统计答案即 ...
- SpringCloud:Zipkin链路追踪,并将数据写入mysql
1.zipkin server 1.1.新建Springboot项目,zinkin 1.2.添加依赖 <dependency> <groupId>io.zipkin.java& ...
- SpringMVC之请求部分
1.接收请求之限定请求类型 只接受Post请求 @RequestMapping(value="",method=RequestMethod.POST) 只接受get请求 @Requ ...
- project.config.json在设置了编译模式的时候会出现配置,怎么解决
因为之前为了方便就选了一个页面进行编译,但是想想回到index首页,就编译了一个pages/index/index. 出现了上面这个,当我再选择编译的时候,还是不会变成之前的. 解决方法是 把红框那段 ...
- 通过源码安装RYU控制器
目录 安装 测试 安装 安装pip3 sudo apt-get install python3-pip 获取ryu源码 git clone https://github.com/osrg/ryu.gi ...
- IDEA控制台乱码终极解决方案
1. 问题描述 由于本机的IDEA 2019.1出现了无法连接插件商店和Spring Boot模板的问题,就重装了了最新的IDEA 2019.2.4版本,使用了一段时间以后,没有改任何的配置,控制台的 ...
- 小福bbs-冲刺日志(第一天)
[小福bbs-冲刺日志(第一天)] 这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 开会,安排具体工作 作业的正文 小福bbs-冲刺日志(第一 ...
- 迁移mysql数据位置
查看位置: show variables like '%datadir%'; /var/lib/mysql