CF55D Beautiful numbers

news/2026/1/21 20:19:06/文章来源:https://www.cnblogs.com/MeltingPot/p/19513950

CF55D Beautiful numbers

题目大意

一个正整数是“美丽的”,当且仅当它能被其所有非零数字整除。统计给定区间内美丽数的个数。\((1≤l_i≤r_i≤9\cdot 1^18)\)

分析

显然数位 \(DP\),那么我们来考虑一下需要记录什么。

  • 因为约束条件是关于数位与数字整体的,所以需要记录当前数字 \(pre\) 大小。
  • 想要被所有数位整除,一个显然的转化是利用 \(lcm\) 表示整除关系。
  • 常规的上界标志 \(lim\)

现在有了需要记录的信息,进一步分析时空复杂度:

先来看空间复杂度:

  • 首先 \(pre\) 的数值太大,我们当然可使用 unordered_map,但在这里考虑另外一种方法,利用一个神奇的转化技巧:

    \[A \mod a_i=A \mod lcm(a_1,a_2\cdots a_i\cdots a_n) \mod a_i \]

    而一到九的 \(lcm\) 很容易求出是 \(2520\),从而可以通过给 \(pre\) 取模降低空间复杂度。
  • 其次,\(1\)\(9\) 任意数字组合的不过 \(36\) 种,因此 \(lcm\) 可以通过离散化进一步降低空间复杂度。

再来看时间复杂度:

  • 首先求 \(lcm\) 时预处理 \(gcd\),常规操作。
  • 然后,数位 \(DP\) 本身就是对多种状态的剪枝,因此对于多测的数位 \(DP\) 题而言,不必每次清空 \(dp\) 数组,之后直接复用即可,这样可以极大地加快运行速度。但是,值得注意的是如果想要复用之前的 \(dp\) 状态,就不能记忆 \(lim\) (上界)这类对于询问有特殊性地信息!

code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=20,p=2520;
int t;
int dp[N][2600][2][50],GCD[50][10];
int num[N],sta[3000],id[3000];
int dfs(int pos,int pre,int lim,int lcm){if(!pos) return !(pre%lcm);if(~dp[pos][pre%p][lim][sta[lcm]]&&!lim)return dp[pos][pre%p][lim][sta[lcm]];int maxn(lim?num[pos]:9);int res(0);for(int i=0;i<=maxn;++i){int ppre=(pre*10+i);int llcm=!i?lcm:lcm/GCD[sta[lcm]][i]*i;res+=dfs(pos-1,ppre,lim&&i==maxn,llcm);}if(!lim) dp[pos][pre%p][lim][sta[lcm]]=res;return res;
}
int sol(int n){num[0]=0;for(int x=n;x;x/=10) num[++num[0]]=x%10;return dfs(num[0],0,1,1);
}
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);for(int i=1;i<=p;++i)if(!(p%i)) id[sta[i]=++sta[0]]=i;for(int i=1;i<=sta[0];++i)for(int j=1;j<=9;++j) GCD[i][j]=__gcd(id[i],j);memset(dp,-1,sizeof(dp));cin>>t;for(int l,r;t--;){cin>>l>>r;cout<<sol(r)-sol(l-1)<<endl;}
}

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

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

相关文章

Web开发:使用C#的System.Drawing.Common将png图片转化为icon图片

1.安装第三方库 我的是.NET6&#xff0c;因此需要安装8.0.0版本的【System.Drawing.Common】&#xff0c;若版本太高会在.NET6平台跑不了 2.代码 using System; using System.Drawing; using System.Drawing.Imaging; using System.IO;namespace PngToIcoConverter {class Pro…

下载适合内网服务器环境的python whl安装包

1、第三方包whl下载地址&#xff1a; https://pypi.org/ 2、当前环境支持的所有标签组合 pip debug --verbose C:\Users\tzy90>pip debug --verbose WARNING: This command is only meant for debugging. Do not use this with automation for parsing and getting these d…

深入解析:嵌入式第二十三篇——数据结构基本概念

深入解析:嵌入式第二十三篇——数据结构基本概念2026-01-21 20:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displa…

内网服务器环境如何进行python依赖安装

使用命令查询本地包依赖&#xff1a;pipdeptree ├── requests [required: >2.31.0,<3.0.0, installed: 2.31.0] │ ├── certifi [required: >2017.4.17, installed: 2024.2.2] │ ├── charset-normalizer [required: >2,<4, installed: 3.3.2] │ …

【机器人路径规划】基于四种最新算法(小龙虾优化算法COA、螳螂搜索算法MSA、红尾鹰算法RTH、霸王龙优化算法TROA)求解机器人路径规划研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真…

2026成都最新房屋装修品牌top5评测!服务深度覆盖金牛区、新都区、青羊区、成华区等地优质装修公司权威榜单发布,品质赋能构筑理想家居生活.

随着人们对居住品质要求的不断提升,房屋装修市场呈现出多元化、个性化的发展趋势。本榜单基于环保标准、设计实力、施工工艺、服务覆盖、客户口碑五大维度(四川大晶装饰新增“晶钻体系”专项维度),结合行业协会数据…

提示工程架构师最新趋势:AI辅助的提示词自动化生成与准确性保障

提示工程架构师最新趋势:AI辅助的提示词自动化生成与准确性保障 一、引言 (Introduction) 钩子 (The Hook) 你是否曾在使用人工智能模型时,为了想出一个能得到理想输出的提示词而绞尽脑汁?比如,当你希望通过图像生成模型创作一幅独特的艺术作品,或者利用语言模型撰写一…

MongoDB 7.0 副本集高可用部署

适用场景:生产环境搭建高可用 MongoDB 副本集,确保数据冗余与自动故障转移 MongoDB 版本:7.0.28(社区版) 操作系统:CentOS 7 架构:1 主(Primary) + 2 从(Secondary),共 3 个数据承载节点(P-S-S) 存储引擎…

基于深度学习的密集人群行人检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)

摘要:本文介绍了一套基于YOLO系列算法的密集人群行人检测系统。系统支持图片、视频及实时摄像头检测,具备模型切换、置信度调节、数据统计与导出等功能。通过对比YOLOv5/v8/v11/v12模型性能,显示YOLO12n精度最高(mA…

0117模考

考时 开场1h纯在chatting with friends,1h后才开始写题。 开T1,这不是MST+倍增板子吗,直接写写写,调了几发,在10:40交了。 T2看了是个状压dp板子,感觉比较难写(之后发现代码只有1k),先看T3。 T3看了十分钟有了思…

ps命令

ps命令下面给你一组“更全、更强”的命令组合,用于 Kafka 进程性能分析。你可以把它们当作一套排查脚本:从线程、CPU、IO、网络、GC、JVM 堆、以及系统层面逐层分析。 我会按从轻量到重型排序,并且说明每条命令的用…

Docker 镜像启动失败时,如何用 --entrypoint 进入容器排障

# Docker 镜像启动即退出?使用 --entrypoint /bin/bash 进入容器排障 在日常使用 Docker 的过程中,经常会遇到这样一种情况: > 镜像可以正常 build > 但 `docker run` 一启动就退出 > 容器根本进不去,日…

打破屏幕的边界:实战 MCP 协议对接 Slack 与 Telegram,构建 7*24 小时随身待命的 AI 智能指挥中心

&#x1f680; 打破屏幕的边界&#xff1a;实战 MCP 协议对接 Slack 与 Telegram&#xff0c;构建 7*24 小时随身待命的 AI 智能指挥中心 &#x1f4a1; 内容摘要 (Abstract) 在移动办公与分布式协作成为主流的今天&#xff0c;交互的“即时性”与“无处不在”是提升生产力的…

使用natapp实现内网穿透

1、由于在开发的时候需要接微信支付、支付宝支付等其他接口的时候,需要线上回调,这在本地开发测试的比较麻烦,所以就使用natapp内网穿透工具实现远程接口可以直接回调到本地 2、安装:#由于我是使用的linux环境,所…

含贵金属六元合金详解:成分、应用及本地合规回收攻略

在贵金属合金领域,六元合金因兼具多种贵金属的优异性能,成为电子、化工、航空航天等高端行业的核心材料,同时也是工业废料中极具回收价值的“隐形宝库”。本文结合本地行业实操经验,全面拆解含贵金属六元合金的成分…

【C++】网络编程 - hjk

前言 围绕Socket 的基础概念、I/O 模型,逐步实现阻塞 I/O 客户端 - 服务器、多进程 / 多线程服务端处理,以及基于 select、poll、epoll 的 I/O 多路复用服务端,侧重与如何实现。 什么是socket 在C++中,Socket编程是…

京东e卡回收,秒变实用零钱

不少人手里都攒着闲置的京东e卡,想把它们换成能随手花的日常零钱。就说楼下的张阿姨吧,去年她收到两张面值五百的京东e卡,可她平时很少在京东购物,便琢磨着换成零钱给孙子买零食、给老伴买茶。她跑了两家线下礼品回…

Oracle 迁移至 KingbaseES 实战指南(最佳实践)

Oracle 迁移至 KingbaseES 实战指南&#xff08;最佳实践&#xff09; 随着国产数据库生态逐步成熟&#xff0c;越来越多企业开始将核心业务系统从 Oracle 等商业数据库迁移至国产数据库平台。其中&#xff0c;KingbaseES 作为国产关系型数据库中对 Oracle 兼容度较高的产品之…

day7 454.383.15.18

day7 454.383.15.18Leetcode 454 四数相加Ⅱ unordered_map使用的练习,一次通过,但是定义了两个unordered_map,并且需要经过两次遍历,空间和时间消耗都增加了 int fourSumCount(vector<int>& nums1, vec…

使用 Python 将 PowerPoint 转换为 Word 文档 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …