紫书第五章习题 5-15 UVa 12333 - Revenge of Fibonacci

从符号到基元:Token的技术演化史与“词元”汉化的术语学 中文摘要:Token概念演化与"词元"译名的确立 本文系统梳理了"Token"概念从信息论符号到AI基元的完整演化史,揭示了"词元"这一中文译名确立的必然性。概念发展经历了三个阶段:早期作为编译原理中的词法单元(1960s),统计NLP时期作为概率空间的原子(1990s-2000s),以及神经时代成为动态语义载体(2010s后)。随着Transformer架构兴起,Token从静态符号转变为上下文相关的语义基元,其定义彻底突破"词&quo 阅读详情

出处:https://blog.youkuaiyun.com/mobius_strip/article/details/27053639

题目链接:https://vjudge.net/contest/231030#problem/O


题目:给你一个数字串,判断他是哪一个Fib数的前缀,有多种答案输出最小的,不存在输出-1。

分析:字符串,大整数。

            首先,利用大整数计算Fib的前100000项,由于数据较大,只储存前50位即可。

            然后,按Fib的顺序存入字典树,利用滚动数组一边生成一边存储,可以减少内存开销。

                        在存的过程中直接进行标记,每个新节点直接标记成新加入的编号即标记路径。

                        这个值就表示到这个点结束的最小编号,这显然成立。

                        如果有更小的编号,应该更早早插入;而后面相同前缀的编号一定更大。

            最后,读入字符换,查询即可,无论是否是单词节点,直接返回记录的编号即可。


#include <iostream>  
#include <cstdlib>  
#include <cstring>  
#include <cstdio>  
  
using namespace std;  
  
/* Trie define */    
#define nodesize 4000004      //节点个数     
#define dictsize 10           //字符集大小     
    
typedef struct node1    
{  
    int    id;  
    int    flag;            //值域     
    node1* next[dictsize];    
}tnode;    
tnode  dict[nodesize];    
int    ID[256];  
    
class Trie    
{    
    private:  
        int    size;    
        tnode* root;    
    public:    
        Trie() {makeID(); initial();}    
        void makeID() {    
            for ( int i = 0 ; i < 10 ; ++ i )    
                ID['0'+i] = i;  
        }    
        void initial() {    
            memset( dict, 0, sizeof( dict ) );    
            root=NULL; size=0; root=newnode();    
        }    
        tnode* newnode() {return &dict[size ++];}    
        void insert( char* word, int L, int id ) {    
            tnode* now = root;    
            for ( int i = 0 ; i < L ; ++ i ) {  
                if ( !now->next[ID[word[i]]] )    
                    now->next[ID[word[i]]] = newnode();    
                /* 标记路径 */  
                if ( !now->id && !now->flag ) now->id = id;  
                now = now->next[ID[word[i]]];    
            }  
            if ( !now->flag ) {  
                now->flag = 1;  
                now->id = id;  
            }  
        }  
        int query( char* word ) {  
            tnode* now = root;    
            for ( int i = 0 ; word[i] ; ++ i ) {  
                if ( !now->next[ID[word[i]]] ) return -1;    
                now = now->next[ID[word[i]]];    
            }  
            return now->id;  
        }  
}trie;    
/* Trie  end */    
  
int  F[2][21000];  
char FF[42],In[42];  
  
int main()  
{  
    /* 大整数计算Fib前100000个数字 */  
    memset( F, 0, sizeof(F) );  
    F[0][0] = F[1][0] = 1;  
    trie.insert( "1", 1, 0 );  
    int s = 0,l = 1,r,count,p,q;  
    for ( int i = 2 ; i < 100000 ; ++ i ) {  
        p = i%2, q = (i+1)%2;  
        for ( int j = s ; j < l ; ++ j )  
            F[p][j] = F[p][j] + F[q][j];  
        for ( int j = s ; j < l ; ++ j )  
            if ( F[p][j] >= 10 ) {  
                F[p][j+1] += 1;  
                F[p][j]   -= 10;  
            }  
        if ( F[p][l] ) l ++;  
        if ( l - s > 50 ) s ++;  
        r = l-1;  count = 0;  
        while ( r >= 0 && count < 40 )   
            FF[count ++] = F[p][r --] + '0';  
  
        trie.insert( FF, count, i );  
    }  
    int T;  
    while ( scanf("%d",&T) != EOF )   
    for ( int t = 1 ; t <= T ; ++ t ) {  
        scanf("%s",In);  
        printf("Case #%d: %d\n",t,trie.query( In ));  
    }  
    return 0;  
}  

Arcmap计算土方量教程 1. 创建现状TIN 结果数据: 2. 创建设计TIN 结果数据: 注意:现状TIN和设计TIN构建时候的坐标系不同,设置坐标系见最后的注意事项第1点,就是import(导入)那步骤,现状TIN构建时选择高程点数据或者等高线数据,设计TIN构建时候选择洱海面数据 3. TIN转栅格 改成你要存的数据库,注意中间不要有汉字 结果数据(设计TIN转栅格的同理) 4. 裁剪现状TIN转成的栅格 结果数据: 5. 计算土方量 结果数据: ... 阅读详情

相关推荐

Glue)《Multi-omics single-cell data integration and regulatory inference with graph-linked embedding》

论文引入GLUE框架,通过知识引导图(guidance graph)显式建模跨层调控交互,桥接特征空间,实现准确、鲁棒、可扩展的整合。近年来,单细胞测序技术(如scATAC-seq用于染色质可及性、snmC-seq用于DNA甲基化、scRNA-seq用于转录组)允许同时探测多个组学层,揭示细胞异质性和调控机制。GLUE优于现有方法:桥接特征空间,避免信息丢失,支持多组学和调控推断。用于整合未配对的单细胞多组学数据(如scRNA-seq、scATAC-seq和snmC-seq),并同时进行调控交互推断。

m0_58293236的博客 1152

uva12333(字典树 +高精度)

这个题的难点在于高精度加法求前1e5个斐波那契数的前缀,如果开足够长的数组去存储整个结果,每次进行多位的计算会超时,所以只保存高位前50位即可,所以在计算时就涉及到移位,这个计算我的方法总是超时,网上有用string计算的是5000+ms,我cv了一份大佬的计算方法,200+ms 字典树查找,用一个数组去存当前节点最小的索引值 #include <iostream> #include...

weixin_43763889的博客 362

[Github]GitHub 2FA快速安全配置全攻略

GitHub强制要求用户启用双重身份验证(2FA)以提升代码安全。本文详细介绍了2FA的三种实现方式:TOTP应用验证(推荐)、SMS短信验证(备用)和硬件安全密钥(最安全),并提供了配置指南。特别推荐使用在线工具2FA.run快速测试TOTP功能。文章还涵盖恢复代码管理、企业级2FA策略制定以及常见问题解决方案,如时间同步问题、多设备同步等。通过强制2FA、定期审计和建立安全事件响应流程,开发者可构建更安全的代码管理体系。

冰茶的博客 2620

UVA 12333 - Revenge of Fibonacci (斐波那契的复仇) 【后日谈】by SuCicada

正篇以及正确解题思路和代码参见 UVA 12333 - Revenge of Fibonacci (斐波那契的复仇) by SuCicada 此篇为后日谈 要说为什么专门开一篇来记录想法呢,主要是因为想说的太多了。首先从UVA的提交记录上来看,上一次答题是在足足1年之前了。 这么久以来都没有再好好做算法,感觉快要忘本了。而且出来之后脑子也不是那么灵光了,虽然更理性,但是却少了些抽象的想象力。...

SuCicada 小米的蝉 572

PX4无人机实战:手把手教你用MAVROS实现Offboard模式(附避坑指南)

本文提供了一份详尽的PX4无人机Offboard模式实战指南,重点解析了如何通过MAVROS实现从仿真到实机的控制。内容涵盖硬件连接、串口权限设置、MAVROS配置、核心代码编写以及实机操作全流程,并附有详细的避坑指南和故障排查手册,帮助开发者快速掌握ROS与PX4飞控的集成开发。

weixin_29172201的博客 267

FLUENT UDF编译及蒸发冷凝相关问题

蒸发冷凝与相间传质

weixin_48029137的博客 1万+

UVa-12333:Revenge of Fibonacci 高精度

之前自己仿照紫书上写了高精度库,完善了乘法、减法,并且通过了和C++高精度库GMP的对拍测试,也一些OJ上过了一些高精度的模板题,代码仓库地址:https://github.com/Edward-Elric233/BigInt 求解思路 题目的意思是求前100000斐波那契数列中某个前缀(不超过40个字符)第一次出现的位置。刚开始我的想法很简单,先求出这十万个斐波那契数列的前缀,然后每次读入的时候查找一遍就可以了,结果超时了。每次查找的复杂度是O(1e5∗40)O(1e5 * 40)O(1e5∗40),有5

T_T233333333的博客 411

PD详解—第一章—Type-C连接

Type-C连接 今天大师匈下班比较早,再给大家侃一侃PD,希望大家支持。 PD和Type-c的关系 首先讲一下PD快充的实现步骤,本文主要是Source端(电源),Sink端的差不多也一样,只是策略不同而已。 TypeC连接-->广播电源能力Source capbility(数据交互)->打电压电流->等待其他指令。 所以typec连接是第一步,很多人会从字面意思理解typec连接,这不就是把线给插上去就好了吗? 不知道有没有优秀的同学想到正确答案; 正确答案:typec连接的本质是为

大师匈的博客 1万+

UVA12333--Revenge of Fibonacci

题意: 给你一个数字串,判断他是哪一个Fib数的前缀,有多种答案输出最小的,不存在输出-1。思路: 大数加法计算斐波那契数,字典树搜索 计算过程中进行字典树的创建,计算时,当斐波那契数大于50位时,只计算高50位即可。代码:#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #define ma

wanna_wsl的博客 523

SAP BOM批量反查代码分享

SAP BOM反查批量查询代码分享

我小时候很黑的博客 4972

Python 爬虫教程:企业官网基本信息抓取

本文介绍了使用Python爬虫技术抓取企业官网信息的方法,包括公司名称、简介、联系方式、地址、产品及新闻等数据。通过Requests和BeautifulSoup库实现网页请求与解析,并利用Pandas存储数据为CSV文件。同时提供了应对反爬虫机制(如设置User-Agent、代理IP池、延迟请求等)的解决方案,帮助高效获取企业公开数据。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1859

UVA 12333 Revenge of Fibonacci

题目链接:https://vjudge.net/problem/UVA-12333 题意摘自《算法禁赛入门经典》 题目大意   有一天晚上,你梦到了 Fibonacci,它告诉你一个有趣的 Fibonacci 数。醒来以后,你只记得了它的开头几个数字。你的任务是找出以它开头的最小 Fibonacci 数的序号。例如以 12 开头的最小 Fibonacci 数是 F(25)。输入不超...

weixin_30287169的博客 219

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

UVA 12333 斐波那契的复仇 今日竞赛刷题总结

竞赛小白,最近在刷紫书,终于刷到了这么一个具有思维挑战性的题目,从昨晚到现在,不断写不断debug不断参考资料,终于花了五六个小时A了这个题。 这个题对于竞赛小白的我学到了很多东西。 1.首先,大数高精度加减: 一般来说我都习惯使用链表进行高精度加减,但是,这个题之后,使我摒弃了高精度使用链表保存数字的想法,因为,链表由于其数据结构的特点,非常占用空间,这个题100000个数,全用链表保存会直接导致内存爆炸,甚至把我的电脑跑蓝屏了。其次,链表增添数字需要设置头指针,还需要设置前驱指针,代码复杂,容易遗

qq_51603524的博客 575

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

UVA-12333 Fibonacci的复仇 题解答案代码 算法竞赛入门经典第二版

GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 算法竞赛入门经典书中给出了大数类的算法,直接照抄即可。 我的做题过程: 1. 照着书上抄了大数类,下面的判断就使用循环查找。结果超时。 2. 大数类从int改成了long long,base成了10^16。结果还是超时。 3. 不直接存储大数类本身,只存储前40个数字的string的vector。结果超时。 3. 优化细节:iostream改成stdio.h,生成Fibonacci

Coding home - 漂流瓶jz 748

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

UVA - 12333 字典树+大数

思路:用字典树将前40个数字记录下来,模拟大数加法即可。 AC代码 #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #pragma comment(linker,

flyawayl的博客 566

UVa 12333 - Revenge of Fibonacci(字典树+高精度压位)

输入一个斐波那契数的前缀,求开头与所给前缀相同的最小斐波那契数的编号。 容易超时的一道题,计算前十万个斐波那契数要用高精度算法,还要注意只保留前50位就够了,不然会超时。 然后就是查询,原本保存在string数组中,单次查找复杂度为O(n*s.length())。发现查找会超时,后来使用了字典树,单次查找仅为O(s.length()),效率提高很多,就过了。 建树使用了指针,调用之前一定要判断不为空。

wcr1996的专栏 2624

UVA 12333 - Revenge of Fibonacci (斐波那契的复仇) by SuCicada

合适的思路 大数加法 字典树 代码 注意点 附录 合适的思路 首先想我们该怎么样能匹配前缀,首先我们不知道完整的数字是什么,所以我们要先得到符合要求的数字数据集。 然后将这些数据集放入字典树中 所以我们要做的就是 使用大数加法技巧,计算前100000个fibonacci 将每一个fibo数存入字典树中 大数加法 首先先做大数加法,使用字符串存储数字,两个字符串(数字)从最后一位即个位...

SuCicada 小米的蝉 740

UVA 11885 - Number of Battlefields(斐波那契)

11885 - Number of Battlefields 题意:给周长,求能围成的战场数目,不包括矩形。 思路:具体的递推没递推出来,但是看了网上一个规律,如果包括矩形的答案应该是斐波那契数列(但是奇数情况为0),然后减去矩形数目就是答案,矩形数目为n / 2 - 1,用矩阵快速幂就能求了。 具体的递推过程哪位大神能指点下。。。 代码: #includ

Remilia's 1738

uva 11885 - Number of Battlefields(矩阵快速幂)

题目连接:uva 11885 - Number of Battlefields 题目大意:给出周长p,问多少种形状的周长为p的,并且该图形的最小包围矩阵的周长也是p,不包括矩形。 解题思路:矩阵快速幂,如果包含矩形的话,对应的则是斐波那契数列的偶数项,所以对应减去矩形的个数即可。 #include #include typedef long long ll; const l

不慌不忙、不急不躁 1804

算法竞赛入门经典 习题5-15

UVa12333 Revenge of Fibonacci 给定一个斐波那契数列的前缀(小于等于40),找出具有该前缀的斐波那契数的最小下标(小于100000)。 这道题输入的前缀长度可以达到40,下标的上界为100000,而斐波那契数列的增长速度很快,因此绝对会超出内置类型所能表示的范围,所以必须要使用高精度算法。 根据斐波那契数列的递推公式,大概到2000项时,斐波那契数就有约100位了,简单估计一下,100000项的斐波那契数的长度有几万位,这肯定会超时,所以还需要进行优化。 由于输入前缀长度最大只有

RayoNicks的博客 212

UVa 12333 Revenge of Fibonacci

本文研究了斐波那契数列的前缀匹配问题。针对大数处理和高效查询的挑战,提出了结合高精度计算与Trie树的多模式前缀匹配算法。通过压位存储优化大数运算,利用Trie树快速匹配查询字符串,实现了在O(1)时间内处理每个字符比较。实验表明,该算法能在0.32秒内处理50,000个40位查询,有效解决了斐波那契数列前缀匹配问题。本研究为大数序列的前缀查询提供了通用解决方案。

寂静山林 811

UVa 12333 - Revenge of Fibonacci

题目:给你一个数字串,判断他是哪一个Fib数的前缀,有多种答案输出最小的,不存在输出-1。 分析:字符串,大整数。             首先,利用大整数计算Fib的前100000项,由于数据较大,只储存前50位即可。             然后,按Fib的顺序存入字典树,利用滚动数组一边生成一边存储,可以减少内存开销。                         在存的过程中直接

小白菜又菜 4021

UVA12333

题目传送  : https://vjudge.net/problem/UVA-12333 大数+字典树 给几个斐波那契数的前缀,让你判断最小是第几个。。我写的大数怎么就过不了,只好用了小白的唉。。 边生成大数边插入,并且附加个id就行了。 注意说100000就开到100000别弄大,一大就错。 #include #include #include using namespace

Dave_lzw的博客 1529

算法竞赛入门经典 第二版 习题5-15 Fibonacci的复仇 Revenge of Fibonacci uva12333

题目:https://vjudge.net/problem/UVA-12333思路: 大整数类+字典树 一开始套刘汝佳大整数类的板子套出好多问题,之后自己用string重新封装了一个。 用大整数类求出斐波那契数列然后将前42位插入字典树,便于之后查找前缀。这题做出了灵异事件,在自己机器上预处理好几分钟都跑不完结果交上去竟然AC了。。。。。代码:c++#include <cstdio> #incl

Rewriter_huanying的博客 1263

[刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci

题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F。要求找出下标最小的。没找到输出-1。 代码:(Accepted,0.250s) //UVa12333 - Revenge of Fibonacci //Accepted 0.250s //#define _XIENAOBAN_ #include<i...

weixin_30550271的博客 197

UVa12333 - Revenge of Fibonacci

#include #include #include #include using namespace std; #define nodesize 4000004 #define dictsize 10 typedef struct node1 { int id; int flag; node1* next[dictsize]; }tnode; tnode dict[nod

Dosth_Magic 1276
上一篇: 紫书第五章习题 5-16 UVa 212 - Use of Hospital Facilities
下一篇: 紫书第五章习题5-9 UVa1596-找bug
JXUFE_ACMer
博客等级 码龄9年 20粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值