新闻详情

新闻详情

首页 / 资讯中心 / 详情

UVa 948 Fibonaccial Base

发布时间:2026/10/2 7:01:17来源:尧图网络
UVa 948 Fibonaccial Base
题目描述斐波那契数列由000和111开始后续每一项为前两项之和。所有正整数都可以表示为斐波那契数列中若干不重复项的和。若限制所选集合中不能有两个连续的斐波那契数则每个正整数的表示方法唯一。这种表示称为斐波那契进制Fibonaccial base\texttt{Fibonaccial base}Fibonaccial base使用二进制串表示从右向左依次对应斐波那契数使用该数则写111不使用则写000且最高位必须为111表示中不会出现连续的111。给定一组十进制数要求输出其斐波那契进制表示。输入格式第一行包含一个整数NNN1≤N≤5001 \le N \le 5001≤N≤500表示后续数字的数量。接下来NNN行每行包含一个小于100000000100000000100000000的正整数。输出格式对于每个输入整数输出一行格式为DEC_BASE FIB_BASE (fib)其中DEC_BASE为原始十进制数FIB_BASE为其斐波那契进制表示。样例输入10 1 2 3 4 5 6 7 8 9 10样例输出1 1 (fib) 2 10 (fib) 3 100 (fib) 4 101 (fib) 5 1000 (fib) 6 1001 (fib) 7 1010 (fib) 8 10000 (fib) 9 10001 (fib) 10 10010 (fib)题目分析本题要求将十进制正整数转换为斐波那契进制表示。斐波那契进制使用斐波那契数列中不连续的两项之和来唯一表示一个数。转换的关键在于从大到小贪心地选择不超过当前剩余值的最大斐波那契数并确保不选择相邻的斐波那契数。斐波那契数列从F11F_1 1F1​1、F22F_2 2F2​2开始注意此处的下标与题目中从000开始的序列有所不同但表示时从右向左依次对应斐波那契数。由于输入数字小于100000000100000000100000000斐波那契数增长很快最多只需约404040项即可覆盖所有可能的输入。贪心策略的正确性依赖于齐肯多夫定理每个正整数都可以唯一地表示为不连续的斐波那契数之和。因此每次选择不超过当前剩余值的最大斐波那契数即可得到唯一的表示。解题思路首先预计算斐波那契数列从F01F_0 1F0​1、F12F_1 2F1​2开始后续项为前两项之和直到超过最大可能的输入值100000000100000000100000000。实际计算到646464项足够。对于每个输入数字nnn从最大的斐波那契数开始向下遍历。若当前斐波那契数FiF_iFi​不超过nnn则将该位置为111并从nnn中减去FiF_iFi​否则该位置为000。由于贪心选择保证了不会选择相邻的斐波那契数因此最终得到的二进制串不会出现连续的111。将得到的二进制串去掉前导零后输出。使用bitset可以方便地记录每一位的状态最后转换为字符串并去除前导零。时间复杂度为O(N×log⁡max⁡(n))O(N \times \log \max(n))O(N×logmax(n))空间复杂度为O(max⁡log⁡n)O(\max \log n)O(maxlogn)对于题目规模完全可行。代码实现// Fibonaccimal Base// UVa ID: 948// Verdict: Accepted// Submission Date: 2018-03-16// UVa Run Time: 0.000s//// 版权所有C2018邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;constintMAXF64;intmain(intargc,char*argv[]){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);longlongfibs[MAXF]{1,2},n;for(inti2;iMAXF;i)fibs[i]fibs[i-1]fibs[i-2];intcases;cincases;while(cases--){cinn;coutn ;bitset64finary(0);while(n){for(intiMAXF-1;i0;i--)if(nfibs[i]){finary.set(i);n-fibs[i];break;}}string ffinary.to_string();while(f.size()f.front()0)f.erase(f.begin());coutf (fib)\n;}return0;}总结本题的核心是齐肯多夫定理每个正整数唯一表示为不连续的斐波那契数之和。通过从大到小贪心选择斐波那契数可以快速得到斐波那契进制表示。实现时需要注意斐波那契数列的起始项为111和222并确保输出时去掉前导零。时间复杂度为O(N×log⁡max⁡(n))O(N \times \log \max(n))O(N×logmax(n))空间复杂度为O(max⁡log⁡n)O(\max \log n)O(maxlogn)能够高效处理所有测试用例。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

嵌入式Linux ASoC音频控件开发实战:从寄存器映射到DAPM调试 2026/10/2 7:50:09

嵌入式Linux ASoC音频控件开发实战:从寄存器映射到DAPM调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
IN-Sight智能相机TCP/IP双向通讯配置与调试实战指南 2026/10/2 7:50:09

IN-Sight智能相机TCP/IP双向通讯配置与调试实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
正弦余弦混沌映射图像加密解密Matlab实现 2026/10/2 7:49:56

正弦余弦混沌映射图像加密解密Matlab实现

做图像加密这块,我前前后后折腾了小半年,踩过不少坑,也积累了一些比较顺手的方案。今天就把一套基于正弦余弦混沌映射、对RGB三通道分别进行“行移位-列移位-XOR异或”操作的完整加密解密流程拿出来,配上可以直接跑的Matlab代码&a…

阅读更多 →
Logistic回归本质:概率建模、数值稳定与最大熵解释 2026/10/2 7:49:56

Logistic回归本质:概率建模、数值稳定与最大熵解释

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Windows自带蓝牙调试BLE设备:GATT原理到实操指南 2026/10/2 7:49:56

Windows自带蓝牙调试BLE设备:GATT原理到实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
STK 11.5在Win10下的安装配置:系统准备、运行库与许可证排错指南 2026/10/2 7:49:56

STK 11.5在Win10下的安装配置:系统准备、运行库与许可证排错指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉