[题解]P3413 萌数
先打出暴搜代码,参数有\(pos,limit,hui\),其中bool类型的\(hui\)表示到当前是否有回文。
暴搜代码中加入了一个剪枝:if(!limit&&hui) return pow10[pos];,这个!limit很重要,我就是因为这个没加,暴搜代码都调了半天。然后就是if(pos==0) return hui;。
我们还需要记录下填过的位是不是前导\(0\),所以用-1表示前导\(0\)。
接下来考虑怎么记忆化,我们发现,当前的答案只和\(pos\)、\(sta[pos+1]\)和\(sta[pos+2]\)有关。我们在\(pos\)相同的情况下分类讨论:
- 后\(2\)位都不是前导\(0\),而且都不一样。
- 后\(2\)位都不是前导\(0\),而且都一样。
- 后\(2\)位中最高位是前导\(0\)。
- 后\(2\)位中都是前导\(0\)。
我们又可以发现,第\(2\)种情况和第\(3\)中情况本质上是一样的。所以\(pos\)相同的时候,一共只有\(3\)种情况,我们根据情况计算出状态码,然后用\(f[pos][stanum]\)来记忆化。空间和时间都很优,\(1010*3\)。
注意
- \(L,R\)足足有\(1000\)位,所以得用
string存。而字符串减\(1\)操作不好弄,所以答案用\(solve(r)-solve(l)\),然后特判\(l\)是否符合条件,符合条件再额外加\(1\)。 - 虽然不需要开
long long,但是打表计算\(pow10\)的时候需要类型转换一下再取模,否则\(*10\)会溢出。
Code
点击查看代码
#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
string l,r;
int a[1010],sta[1010],len;
int f[1010][3],pow10[1010];
int dfs(int pos,bool limit,bool hui){
if(!limit&&hui) return pow10[pos];
if(pos==0) return hui;
int stanum;
if(sta[pos+1]==-1&&sta[pos+2]==-1) stanum=2;
else if(sta[pos+2]==-1||sta[pos+1]==sta[pos+2]) stanum=1;
else stanum=0;
if(!limit&&f[pos][stanum]!=-1) return f[pos][stanum];
int rig=limit?a[pos]:9,ans=0;
for(int i=0;i<=rig;i++){
bool is=(sta[pos+1]==-1&&i==0);
sta[pos]=is?-1:i;
bool thui=hui||(sta[pos]==sta[pos+1]&&sta[pos+1]!=-1)||(sta[pos]==sta[pos+2]&&sta[pos+2]!=-1);
ans=(ans+dfs(pos-1,limit&&i==rig,thui))%mod;
}
if(!limit) f[pos][stanum]=ans;
return ans;
}
int solve(string s){
len=s.size();
for(int i=0;i<len;i++){
a[len-i]=s[i]-'0';
}
sta[len+1]=sta[len+2]=-1;
return dfs(len,1,0);
}
int main(){
pow10[0]=1;
for(int i=1;i<=1005;i++) pow10[i]=(10ll*pow10[i-1])%mod;
memset(f,-1,sizeof f);
cin>>l>>r;
bool is=0;
int len=l.size();
for(int i=0;i<len-2;i++){
if(l[i]==l[i+1]||l[i]==l[i+2]){
is=1;
break;
}
}
if(l[len-2]==l[len-1]) is=1;
cout<<(solve(r)-solve(l)+is+mod)%mod;
return 0;
}
[题解]P3413 萌数的更多相关文章
- [Luogu] P3413 萌数
题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:已和谐 . 题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只 ...
- 洛谷$P3413$ 萌数 $SAC\#1$ 数位$dp$
正解:数位$dp$ 解题报告: 传送门! 非常套路的数位$dp$,,,?打起来就很爽昂,,,不要脑子,我就很爱嘻嘻嘻 然后$[l,r]$这种问题不显然考虑套路地搞成$[1,l-1]$和$[1,r]$嘛 ...
- 题解 P3413 【SAC#1 - 萌数】
这道题刚开始正向思维,然后处理重复的时候咕咕了. 参考了@巨型方块 大佬的题解后AC了,在这里就说几个我觉得比较重要或是容易被忽略的点,然后补充一些跳过的证明. 这道题的状态可以设为$dp[i][j] ...
- 洛谷P3413 SAC#1 - 萌数 题解 数位DP
题目链接:https://www.luogu.com.cn/problem/P3413 题目大意: 定义萌数指:满足"存在长度至少为2的回文子串"的数. 求区间 \([L,R]\) ...
- 洛谷P3413 SAC#1 - 萌数(数位dp)
题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数:1 ...
- 【洛谷P3413】萌数
题目大意:求区间 [l,r] 内萌数的个数,其中萌数定义为数位中存在长度至少为 2 的回文子串的数字. 题解:l, r 都是 1000 位级别的数字,显然是一道数位 dp 的题目,暴力直接去世. 发现 ...
- 洛谷 P3413 【萌数】
敲完这篇题解,我就,我就,我就,嗯,好,就这样吧... 思路分析: 首先我们要知道一个回文串的性质--假如说一个[l-1,r+1]的串是回文的,那么[l,r]一定也是回文的. 所以我们只要记录前一个数 ...
- luogu 3413 SAC#1 - 萌数
题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数:1 ...
- [luogu3413]萌数
[luogu3413]萌数 luogu 考虑数位dp 怎么判断一个数是不是萌数? 只要知道其中某一位和它的前一位相等或者和前一位的前一位相等,那么它就是一个萌数 什么样的数不是萌数? 对于它的每一位都 ...
- 【题解】P3939数颜色
[题解]P3939 数颜色 不要数据结构和模板学傻了... 考虑到兔子们交换都是相邻的,说明任何一次交换只会引起\(O(1)\)的变化. 我们开很多\(vector\)存没种兔子的下标就好了.到时候二 ...
随机推荐
- 代码随想录第11天 | 二叉树part01
理论基础 需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义 文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7 ...
- 设置java程序的守护进程
1.在服务器执行:crontab -e 命令 2.在出现的界面编写cron表达式 3.编写guard_java_extbork.sh脚本 #!/bin/bash source /etc/profil ...
- 你应该懂的AI大模型(一) 之 浅知大模型
1.AI 大模型的训练过程 AI 大模型的训练就如同让一名孩童从不会说话一步步培养成高级知识分子或者专家的过程. 第一步:收集数据,将海量的知识与文章收集起来作为学习资料教给这个孩子: 第二步:预处理 ...
- 1-python中的两大法宝和加载数据
python中的两大法宝和加载数据 1. Python两大法宝 ① Python3.6.3相当于一个package,package里面有不同的区域,不同的区域有不同的工具. ② Python语法有两大 ...
- 安装程序无法创建新的系统分区,也无法定位现有系统分区_安装win7在固态硬盘解决
在安装Windows7时,想必有很多人都安碰到这样的情况吧!在安装界面里选择安装时,却出现"安装程序无法创建新的系统分区,也无法定位现有系统分区" 如下图: 方法/步骤 进入win ...
- MongoDB入门实战教程(14)
MongoDB入门实战教程转眼就到了尾声,本篇我们就来总结一下MongoDB的应用开发最佳实践. 1 关于MongoDB的连接 (1)MongoDB Driver:我们最好选择与所用MongoDB服务 ...
- Sql server 查看那个表占用的空间最多
要查看 SQL Server 中哪个表占用的空间最多,您可以使用以下查询来列出所有表及其占用的空间大小,并按照占用空间从大到小进行排序: SELECT t.NAME AS TableName, p.r ...
- 保姆级教程:跟虚竹哥用Gemini-2.5-pro,一步搞定任何内容的思维导图,国内直接使用
零.前言 每一份厚重的报告,每一篇深奥的论文,都像一座等待探索的知识矿山.我们常常深陷于文字的细节中,却迷失了通往宝藏的路径.你是否想过,如果有一张地图,能清晰标示出每一条知识的脉络与连接,这场探索之 ...
- mac快速安装git
前提 每次安装git,都需要安装xcode,我不需要xcode 而且这厮还极其的大,下载慢. 找到一个办法[如果你不需要 Xcode,只安装 Xcode Command Line Tools 就可以了 ...
- 企业微信公众号本地调试auto2.0
适配开发者工具 企业微信公众号.微信公众号本质相同,因为我在开发企业号,所以拿企业号为例 首先添加企业应用 然后进入改应用,配置主页.网页授权及JS-SDK.企业微信授权登录 注意企业微信不允许配置l ...