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

CF55D Beautiful numbers

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.jsqmd.com/news/280129/

相关文章:

  • 下载适合内网服务器环境的python whl安装包
  • Web开发:使用C#的System.Drawing.Common将png图片转化为icon图片
  • 深入解析:嵌入式第二十三篇——数据结构基本概念
  • 【机器人路径规划】基于四种最新算法(小龙虾优化算法COA、螳螂搜索算法MSA、红尾鹰算法RTH、霸王龙优化算法TROA)求解机器人路径规划研究附Matlab代码
  • 内网服务器环境如何进行python依赖安装
  • [Windows] 文件名精灵2025 批量修改文件名工具
  • 2026成都最新房屋装修品牌top5评测!服务深度覆盖金牛区、新都区、青羊区、成华区等地优质装修公司权威榜单发布,品质赋能构筑理想家居生活.
  • 提示工程架构师最新趋势:AI辅助的提示词自动化生成与准确性保障
  • MongoDB 7.0 副本集高可用部署
  • 基于深度学习的密集人群行人检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 构建优雅的 Vue.js 表情包选择器:一个功能丰富且可定制的 Emoji Picker 组件
  • 0117模考
  • ps命令
  • 打破屏幕的边界:实战 MCP 协议对接 Slack 与 Telegram,构建 7*24 小时随身待命的 AI 智能指挥中心
  • 使用natapp实现内网穿透
  • Docker 镜像启动失败时,如何用 --entrypoint 进入容器排障
  • 含贵金属六元合金详解:成分、应用及本地合规回收攻略
  • 论文重复率突破30%?5个实用策略迅速达标
  • 【C++】网络编程 - hjk
  • 京东e卡回收,秒变实用零钱
  • day7 454.383.15.18
  • Oracle 迁移至 KingbaseES 实战指南(最佳实践)
  • 使用 Python 将 PowerPoint 转换为 Word 文档 - 详解
  • 一些经常出现的主题词用简写,引言和正文翻译部分可以找一些英语时态技巧
  • 智能降重新体验:8款AI论文查重工具实测对比
  • POS机的机制,以及流量是怎么传送的
  • 1.hello驱动
  • A problem occurred starting process ‘command ‘bash‘‘
  • AI导读AI论文: WAN: OPEN AND ADVANCED LARGE-SCALE VIDEO GENERATIVE MODELS - 教程
  • AI时代下的DBA、写作、学习和未来.md