【洛谷P3413】萌数
题目大意:求区间 [l,r] 内萌数的个数,其中萌数定义为数位中存在长度至少为 2 的回文子串的数字。
题解:l, r 都是 1000 位级别的数字,显然是一道数位 dp 的题目,暴力直接去世。
发现萌数的定义是一个存在性命题,并不好去求解。利用补集思想,将存在性命题转化成任意性命题,即:求区间 [l,r] 中有多少个数不是萌数。发现只需维护当前位的前两位的数值即可判断是不是萌数,即:若一个数是萌数,当且仅当存在形如 "aa" 或 "aba" 类型的子串。利用数位 dp 统计即可。
另外,注意数组下标,若是负数需要单独判断一下。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
typedef long long LL;
char l[1010],r[1010];
int digit[1010],tot;
LL dp[1010][10][10];
LL dfs(int cur,int pre2,int pre1,bool lead,bool limit){
if(cur==tot+1)return 1;
if(!limit&&!lead&&dp[cur][pre2][pre1]!=-1&&pre2!=-1&&pre1!=-1)return dp[cur][pre2][pre1];
LL ret=0;
int bit=limit?digit[cur]:9;
for(int i=0;i<=bit;i++){
if(!i&&lead)ret=(ret+dfs(cur+1,-1,-1,1,limit&&i==bit))%mod;
else if(i&&lead)ret=(ret+dfs(cur+1,-1,i,0,limit&&i==bit))%mod;
else{
if(i==pre2||i==pre1)continue;
ret=(ret+dfs(cur+1,pre1,i,0,limit&&i==bit))%mod;
}
}
if(!limit&&!lead&&pre2!=-1&&pre1!=-1)dp[cur][pre2][pre1]=ret;
return ret;
}
LL part(char *s){
tot=strlen(s+1);
memset(digit,0,sizeof(digit));
for(int i=1;i<=tot;i++)digit[i]=s[i]-'0';
memset(dp,-1,sizeof(dp));
return dfs(1,-1,-1,1,1);
}
void solve(){
LL ret=part(r)-part(l)+1;
int lenl=strlen(l+1),lenr=strlen(r+1);
for(int i=2;i<=lenl;i++){
if(l[i]==l[i-1]||l[i]==l[i-2]){
--ret;
break;
}
}
ret=(ret+mod)%mod;
LL retl=0,retr=0;
for(int i=1;i<=lenl;i++)retl=(retl*10+l[i]-'0')%mod;
for(int i=1;i<=lenr;i++)retr=(retr*10+r[i]-'0')%mod;
LL ans=((retr-retl+1-ret)%mod+mod)%mod;
printf("%lld\n",ans);
}
int main(){
scanf("%s%s",l+1,r+1);
solve();
return 0;
}
【洛谷P3413】萌数的更多相关文章
- 洛谷$P3413$ 萌数 $SAC\#1$ 数位$dp$
正解:数位$dp$ 解题报告: 传送门! 非常套路的数位$dp$,,,?打起来就很爽昂,,,不要脑子,我就很爱嘻嘻嘻 然后$[l,r]$这种问题不显然考虑套路地搞成$[1,l-1]$和$[1,r]$嘛 ...
- 洛谷P1102 A-B数对
洛谷P1102 A-B数对 https://www.luogu.org/problem/show?pid=1102 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A ...
- 洛谷P1288 取数游戏II(博弈)
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...
- 洛谷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-1,r+1]的串是回文的,那么[l,r]一定也是回文的. 所以我们只要记录前一个数 ...
- 洛谷 P1392 取数
题面 在做这道题前,先要会他的弱化版(实际一模一样,只是愚蠢的洛谷评测级别差了一档(睿智如姬无夜)) ----------------------------------弱化版------------ ...
- 洛谷——P2421 A-B数对(增强版)
题目背景 woshiren在洛谷刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈. 题目描述 给出N 个从小到大排好序的整 ...
- 洛谷 P5206 - [WC2019]数树(集合反演+NTT)
洛谷题面传送门 神仙多项式+组合数学题,不过还是被我自己想出来了( 首先对于两棵树 \(E_1,E_2\) 而言,为它们填上 \(1\sim y\) 使其合法的方案数显然是 \(y\) 的 \(E_1 ...
随机推荐
- Jmeter(五)检查点
录制的脚本回放成功了, 但是运行有可能出现失败的情况, 所以有必要让JMeter来帮我们验证测试结果的正确性. 在Jmeter中是用断言组件来实现此功能的. 首先, 在需要添加断言的请求后面, 添加响 ...
- 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_09.RequestMapping注解的属性
看下RequestMapping下面 一共有几个属性 那么属性用处不大 value和path互相为别名 这里用value表示path也是没有问题的 只有一个属性,并且属性名称叫做value那么就可以省 ...
- 【漏洞汇总】SQL 注入漏洞之 mysql
日期:2019-07-23 19:55:59 更新:2019-08-02 10:40:37 作者:Bay0net 介绍:Mysql 注入笔记 0x01. 基本信息 1.1 基本术语 数据库: 数据库是 ...
- 收货确定 BAPI BAPI_GOODSMVT_CREATE
CLEAR gmhead. gmhead-pstng_date = ls_table-gzdate."sy-datum . gmhead-doc_date = sy-datu ...
- IK分词器的安装与使用IK分词器创建索引
之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字段分成一个一个汉字,然后搜索的时候也会把搜索的句子进行分词,所以这里就需要更加智能的分词器IK分词器了. 1. i ...
- Fidder插件自动生成爬虫代码(C#)
原创,效果如下: 1.新建项目,并添加Fidder.exe的引用: 2.添加代码 [assembly: Fiddler.RequiredVersion("2.2.8.6")]usi ...
- python指定pip安装源
python的pip默认的安装源的位置是国外的,导致有时候下载很慢或者直接失败我们可以切换国内的源 目前国内可用的我知道的有两个 豆瓣的:http://pypi.doubanio.com/simple ...
- 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程
[神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置成功后的第一次训练过程记录<二> 标签:[神经网络与深度学习] [CUDA开发] ...
- 【VS开发】浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...
- pom文件中引入依赖成功了,但是jar包找不着
编写代码的时候总是会碰到各种奇奇怪怪的问题,最近引入依赖的时候发现依赖虽然引入成功了,而且查看仓库,仓库中也存在该jar包,但是项目代码中并没有找到该jar包,重新导入reimport各种都试了还是不 ...