题目大意:求区间 [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】萌数的更多相关文章

  1. 洛谷$P3413$ 萌数 $SAC\#1$ 数位$dp$

    正解:数位$dp$ 解题报告: 传送门! 非常套路的数位$dp$,,,?打起来就很爽昂,,,不要脑子,我就很爱嘻嘻嘻 然后$[l,r]$这种问题不显然考虑套路地搞成$[1,l-1]$和$[1,r]$嘛 ...

  2. 洛谷P1102 A-B数对

    洛谷P1102 A-B数对 https://www.luogu.org/problem/show?pid=1102 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A ...

  3. 洛谷P1288 取数游戏II(博弈)

    洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...

  4. 洛谷P3413 SAC#1 - 萌数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P3413 题目大意: 定义萌数指:满足"存在长度至少为2的回文子串"的数. 求区间 \([L,R]\) ...

  5. 洛谷P3413 SAC#1 - 萌数(数位dp)

    题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数:1 ...

  6. 洛谷 P3413 【萌数】

    敲完这篇题解,我就,我就,我就,嗯,好,就这样吧... 思路分析: 首先我们要知道一个回文串的性质--假如说一个[l-1,r+1]的串是回文的,那么[l,r]一定也是回文的. 所以我们只要记录前一个数 ...

  7. 洛谷 P1392 取数

    题面 在做这道题前,先要会他的弱化版(实际一模一样,只是愚蠢的洛谷评测级别差了一档(睿智如姬无夜)) ----------------------------------弱化版------------ ...

  8. 洛谷——P2421 A-B数对(增强版)

    题目背景 woshiren在洛谷刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈. 题目描述 给出N 个从小到大排好序的整 ...

  9. 洛谷 P5206 - [WC2019]数树(集合反演+NTT)

    洛谷题面传送门 神仙多项式+组合数学题,不过还是被我自己想出来了( 首先对于两棵树 \(E_1,E_2\) 而言,为它们填上 \(1\sim y\) 使其合法的方案数显然是 \(y\) 的 \(E_1 ...

随机推荐

  1. 第九章 SpringCloud之Zuul路由

    ############Zuul简单使用################ 1.pom.xml <?xml version="1.0" encoding="UTF-8 ...

  2. VueLoaderPlugin作用

    在webpack配置里加入new VueLoaderPlugin, 在plugin里打断点 然后debug: 在这个地方: 可以发现,在webpack初始化的阶段..webpack.js刚开始执行的时 ...

  3. SO BAPI SD_SALESDOCUMENT_CREATE

    DATA: E_ORDER_HEADER_IN  LIKE  BAPISDHD1 OCCURS 0 WITH HEADER LINE,           E_ORDER_PARTNERS   LIK ...

  4. java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)

    *Map接口:采用是键值对的方式存放数据.无序 HashMap: *常见的实现类: *--HashMap:基于哈希表的 Map 接口的实现. *常用的构造方法: * HashMap()构造一个具有默认 ...

  5. 使用svctraceviewer查看WCF服务异常信息

    这两天遇到一个问题,调用一个WCF服务的时候,服务器端正常的返回了数据,但是客户端却遇到了一场 System.ServiceModel.CommunicationException: The unde ...

  6. Mysql事务特性

    事务概念 事务可由一条sql或者一组sql组成.事务是访问并更新数据库中各种数据项的一个程序执行单元. 事务会把数据库从一种一致状态转换为另一种一致状态.在数据提交工作时,可以确保要么所有修改都已经保 ...

  7. python学习之面向对象(四)

    6.9 反射 反射是非常重要的内置函数之一. 反射是通过字符串去操作对象相关的属性,这里的对象包括:实列,类,当前模块,其他模块. 主要的四个函数: 查看: hasattr(对象,待查内容的字符串形式 ...

  8. 五、Kubernetes_V1.10集群部署-master-部署组件

    一.配置apiserver 1.生成启动文件 cat > /usr/lib/systemd/system/kube-apiserver.service <<EOF [Unit] De ...

  9. 浅析射线检测 raycast 的使用 !Cocos Creator 3D !

    哎呀?为什么我设置了节点点击回调没反应呀? 记得在写小鸡拍拍的时候遇到一个问题,想要捕捉排球的点击事件,按照 2d 的写法,给3d 节点添加 node 事件,结果点了没反应.代码大概是以下的样子. t ...

  10. Android事件监听(一)——简介篇

    Button.ImageButton事件 setOnClickListener     点击时触发 ListView事件 setOnItemSelectedListener   鼠标滚动时触发 set ...