当前位置: 首页 > news >正文

UVa 547 DDF

题目描述

题目定义了一种数列(十进制数字因子数列,DDF\texttt{DDF}DDF):从任意大于111的整数x1x_1x1开始,xi+1x_{i+1}xi+1等于xix_ixi的所有正因子的各位数字之和。已知该数列最终会进入循环(最终稳定在一个数)。给定区间[m,n][m, n][m,n]m,n≤3000m, n \le 3000m,n3000),要求找出该区间内起始数生成的DDF\texttt{DDF}DDF中最长的一个(即数列长度最大)。若长度相同,取起始数最小的。输出该数列。

输入格式

输入包含多行,每行两个整数mmmnnn,表示区间范围。输入以文件结束符(EOF\texttt{EOF}EOF)终止。

输出格式

对于每个区间,输出两行:第一行Inputi: m n,第二行Outputi: 数列(数列中的数用空格分隔)。

样例

输入

200 500 100 150

输出

Input1: 200 500 Output1: 285 66 36 46 18 30 27 22 9 13 5 6 12 19 11 3 4 7 8 15 Input2: 100 150 Output2: 102 36 46 18 30 27 22 9 13 5 6 12 19 11 3 4 7 8 15

题目分析

本题的核心是预计算每个数的下一个数,然后找到最长链。

预计算

  • 对于111300030003000的每个数,计算其所有正因子的各位数字之和,得到下一个数。
  • 由于数列最终会重复,可以使用动态规划或记忆化搜索计算每个数开始的链长。

链长计算

若已知next[i]\textit{next}[i]next[i],则链长len[i]=1+len[next[i]]\textit{len}[i] = 1 + \textit{len}[\textit{next}[i]]len[i]=1+len[next[i]](递归)。由于最终会进入循环,需要避免无限递归,可以使用记忆化搜索。

查找最长链

对于区间内的每个数,找出链长最大的数(若长度相同取起始数最小)。

输出

从该数开始,输出整个链直到进入循环(注意循环部分只输出一次)。

复杂度分析

预计算O(3000×3000)O(3000 \times \sqrt{3000})O(3000×3000),查询O(n)O(n)O(n)

代码实现

// DDF// UVa ID: 547// Verdict: Accepted// Submission Date: 2016-08-18// UVa Run Time: 0.020s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intdigit_sum[3100],next_number[3100],length[3100]={0};intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);for(inti=1;i<=3000;i++){intdigit=0,t=i;while(t){digit+=t%10;t/=10;}digit_sum[i]=digit;}for(inti=1;i<=3000;i++){intnext=0;for(intj=1;j<=sqrt(i);j++){if((i%j)==0){intb=i/j;next+=digit_sum[j];if(b!=j)next+=digit_sum[b];}}next_number[i]=next;}for(inti=1;i<=3000;i++){if(length[next_number[i]]>0)length[i]=1+length[next_number[i]];else{intstep=1,start=i;while(next_number[start]!=start){step++;start=next_number[start];}length[i]=step;}}intm,n,cases=0;while(cin>>m>>n){cases++;cout<<"Input"<<cases<<": "<<m<<' '<<n<<'\n';intstart=min(m,n),end=max(m,n),max_i,max_length=0;for(inti=start;i<=end;i++)if(length[i]>max_length){max_i=i;max_length=length[i];}cout<<"Output"<<cases<<": "<<max_i;while(next_number[max_i]!=max_i){max_i=next_number[max_i];cout<<' '<<max_i;}cout<<'\n';}return0;}
http://www.gsyq.cn/news/1563985.html

相关文章:

  • 金融机器学习中合成数据增强的偏置-方差权衡与评估框架
  • 基于神经ODE与LASS的电力系统动态轨迹预测基础模型构建
  • YaCy分布式搜索引擎Ubuntu部署实战指南
  • 【LS-SDMTSP问题】基于减法平均优化算法SABO的大规模单仓库多旅行商问题LS-SDMTSP算法研究附Matlab代码
  • 3步实现AI到PSD智能转换:保留矢量图层的完整方案
  • 金融KOL言论量化策略:NLP与量化工程如何补全交易逻辑
  • 多模态数据缺失值处理:基于流形学习的核插值与奇异值流图分析
  • 2026娄底防水补漏避坑指南:卫生间/厨房/阳台/屋顶/地下室漏水检测维修全攻略,正规施工+透明报价+口碑榜靠谱服务商推荐 - 安佳防水
  • Visual C++运行库整合安装:告别系统依赖错误的终极解决方案
  • 论文深读:Enhancing Video Super-Resolution via Implicit Resampling-based Alignment
  • 2026年中北海旅游美食寻访:靠谱的海鲜加工餐馆哪家好全攻略 - 品牌鉴赏官2026
  • 2026实测Grok4.3模型:能力短板与适配场景详解+国内使用教程
  • 基于条件扩散模型的骨架动作数据增强:原理、实现与工程实践
  • YOLOv8/v10在GPU Droplets上的微调与部署实战指南
  • 类增量学习新思路:概念瓶颈与知识蒸馏如何协同对抗灾难性遗忘
  • CircuitJS1 Desktop Mod:如何免费搭建你的个人电路仿真实验室
  • 2026年MBA战略管理论文最容易过的10个选题方向
  • HunterPie实战指南:构建Monster Hunter World现代化游戏覆盖层系统
  • 终极macOS磁盘空间拯救指南:用Pearcleaner彻底清理应用残留
  • 番茄小说下载器:免费开源工具实现全网小说永久保存
  • 如何快速解锁Microsoft 365完整功能:Ohook开源激活方案完整指南
  • emWin窗口管理器高级API:运动支持、工具提示与内存设备实战
  • 多模态大语言模型的隐私防护与对抗扰动技术
  • League Akari工具箱:智能化英雄联盟体验的革命性升级
  • 家里管道堵了别乱找!2026徐州正规疏通维修团队甄选指南 - 宅安选房屋修缮
  • 大模型命名后缀解析:看懂参数、量化、蒸馏、微调标识,快速筛选适配本地模型.196
  • 暗黑2存档编辑器实战手册:网页版角色修改器完整指南
  • 基于拉格朗日优化的LLM推理资源调度:解决大模型并发请求的延迟与公平性难题
  • 外贸获客与开发方法论
  • Web安全测试实战:SQL注入、XSS与CSRF漏洞原理与手动测试方法