2025年天梯赛补题记录——整数的持续性

news/2025/4/2 6:45:39/文章来源:https://www.cnblogs.com/poutouyvn/p/18802422

图片1-1
为什么没写出来:哈哈,看到400ms就不想写了,被前面一个题目卡了两次时间心态崩了,头脑发昏以为直接算过去会超时(能说那个时候快困死了脑袋很不灵光吗,给自己的无能找借口嘻嘻)
优化思路:
1.记忆化缓存:一想便知道每个数的分解都算一次很费时间,可以联想到记忆化缓存——如果一个数的分解路径上出现了曾经分解计算过的数字,那么直接取用“这个数对应的持续性”即可——显然,这里有一个“映射关系”,unordered_map.
——具体操作:使用vector容器path存储分解路径上的数,得出最后的持续性后,进行路径回溯(遍历path里的数)递推计算路径数对应的持续性,更新记忆化缓存
2.分解操作和乘积操作同时进行,一个迭代分解解决
时间复杂度分析:

AC代码:

点击查看代码
#include <iostream>
#include <unordered_map>  //实现记忆化缓存
#include <vector>//动态存储
#include <algorithm>
using namespace std;int get_product(int num) {  //边拆数边生成新的数int product = 1;while (num > 0) {int digit = num % 10;  //拆数product *= digit;  //新的数num /= 10;}return product;
}int main() {int a, b;cin >> a >> b;unordered_map<int, int> memo;int max_pers = -1;vector<int> result;for (int n = a; n <= b; ++n) {  //循环处理数int current = n;    int pers = 0;  //每次循环都会更新为0vector<int> path;  //只存放这次计算持续性涉及的数字(注意并非数码)while (true) {auto it = memo.find(current);  //实际上一开始memo这个映射为空if (it != memo.end()) {pers += it->second;break;}  //不懂,先跳过if (current < 10) {break;}  //不用计算其持续性path.push_back(current);    //将数放入path动态数组,为什么?current = get_product(current);  //新的数pers++;  //计算current的数位}// Update memo with the current pathint total_pers = pers;  for (int i = 0; i < path.size(); ++i) {int num = path[i];if (memo.find(num) == memo.end()) {memo[num] = total_pers - i;  //存放新的中间结果,保证每个数只分解一次,保证记忆性缓存的正确性}}// Update resultif (pers > max_pers) {max_pers = pers;result = {n};  //清空结果容器并添加正确结果;初始化操作O(1)} else if (pers == max_pers) {result.push_back(n);}}// Sort and outputsort(result.begin(), result.end());cout << max_pers << "\n";for (size_t i = 0; i < result.size(); ++i) {if (i > 0) cout << " ";cout << result[i];}cout << endl;return 0;
}

其他题解思路分析与学习:
1.不进行记忆化缓存也ok,除此之外思路相同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/908684.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《上古卷轴3:晨风》——存档技能数据修改

《上古卷轴3:晨风》由于其mod广泛开发,使得游戏的生命力非常强大,至今仍受广大RPG迷的喜爱!但晨风的技能数据如果用CE去修改,则是无用的。这里提供了技能数据的存档顺序,因此可以利用hex editor类的软件直接修改存档CE修改失效 《上古卷轴3:晨风》由于其mod广泛开发,使…

记录一次Armbian安装宝塔面板遇到ModuleNotFoundError: No module named _sqlite3的问题

如果在用Armbian安装宝塔面板的时候遇到ModuleNotFoundError: No module named _sqlite3报错,并且无法进入web面板界面,可以尝试以下操作。报错界面展示:步骤1:更换或添加Ubuntu软件源地址到/etc/apt/source.list.d文件夹的文件中 例如:将下面的地址添加到/etc/apt/source…

Cesium中glb模型颜色暗淡解决

问题: 3dmax导出fbx,此fbx文件导入blender中,再由blender导出成glb模型,该glb模型放入cesium中贴图颜色颜色暗沉无光,试了各种办法(泛光、时差、多光源、唯一光)效果均不明显。 原因: 发现,转格式过程中不知道哪一环出错,会导致模型材质一个叫metallicFactor的属性格…

工业相机与采集卡配套方案:构建高性能机器视觉系统的核心要素

机器视觉技术作为人工智能和智能制造的关键组成部分,正日益广泛地应用于工业自动化、质量检测、机器人引导等领域。而一套高性能的机器视觉系统,离不开工业相机和采集卡的完美配合。工业相机负责图像的采集,采集卡则负责将相机采集到的图像数据传输到计算机进行分析和处理。…

在Linux环境下搭建Dify

在Linux环境下搭建Dify Dify的概述 Dify是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和LLMOps的理念,使开发者可以快速搭建生成级的生成式AI应用。即使你是非技术人员,也能参与到AI应用的定义和数据运营过程中。由于Dify内置了构建LLM应…

Linux密钥认证及Windows使用密钥连接Linux

概述 Linux中我们要连接主机,输入用户名密码然后连接,我们发现每次连接都要输入密码,对于一些批量操作不方便 我们需要一种新的认证方式,每次连接不需要输入密码,这个方法就叫密钥认证 密钥认证原理原理详解:使用ssh-keygen命令生成私钥和公钥。 使用ssh-copy-id命令将公…

3.31 等价关系与划分

1 等价关系与划分 1.1 等价关系 若R是自反的,对称的和传递的,则称R为A上的等价关系(和恒等关系、全域关系不同) *关系内部的元素是等价的 *R^2={(a,b)}即第一分量到第二分量有一个长度为2的路径 所以R^2(长度为2的路径)∈R(长度为1的路径),即可判断R具有传递性 1.2 等…

wrp golang编译打包

wrp wrp开启一个了一个服务器代理,将Web内容转换为适合特定设备或平台的格式,以提高内容的兼容性和性能。 网页将在wrp服务器进行渲染,返回给请求服务器以降低请求服务器的压力。 https://github.com/tenox7/wrp/releases/tag/4.8.2 更改源代码 wrp项目默认代理地址为google…

CC1链分析

CC1链分析 因为分析的第一条cc链,所以每个细节都处理到了,之后的cc链就不会赘述很多了,毕竟基本都是大同小异,好好认真分析这第一条链,后面也就掌握了十之七八 环境: CC1链在JDK 8u71及之后的版本中被修复,因此需要使用JDK 8u71之前的版本 使用的JDK环境为JDK8u66,JDK下…

如何快速入门前端001

一、了解前端 1、认识主流的前端 uniapp vue2、认识了解路由 数据的获取 组件 数字组件传参 兄弟组件传参 列表 二、下载一套项目,让项目能运行起来 1、下载 安装nvm : https://www.cnblogs.com/jing-tian/p/11225123.html 2、打开控制台 执行nvm use 22.14 执行 nvm 1s 可…