题意简述

求l~r之间存在长度至少为2的回文子串的正整数的个数

题解思路

数位DP

注意到有偶数长度的回文串必有长度为2的回文串,有奇数长度的回文串必有长度为3的回文串

所以只需判断与前一位,前两位是否相等即可

代码

#include <cstdio>
#include <cstring>
#include <iostream>
typedef long long ll;
const int mod = 1000000007;
int cnt, x, llen;
int num[2000];
int dp[2000][11][11][2];
char l[2000], r[2000];
bool _f, f;
int dfs(int len, int p1, int p2, bool limit, bool flag, int s = 0)
{
if (len == 0) return (p1 ^ 10) && flag;
int& dp = ::dp[len][p1][p2][flag];
if (!limit && ~dp && (p1 ^ 10) && (p2 ^ 10)) return dp;
int mx = limit ? num[len] : 9;
for (register int i = 0; i <= mx; ++i)
{
_f = flag || i == p1 || i == p2;
x = p1 == 10 && i == 0 ? 10 : i;
s = ((ll)s + dfs(len - 1, x, p1, limit && (i == mx), _f)) % mod;
}
if (!limit && (p1 ^ 10) && (p2 ^ 10)) dp = s;
return s;
}
int solve(char x[])
{
cnt = strlen(x); for (register int i = 0; i < cnt; ++i) num[i + 1] = x[cnt - i - 1] - '0';
return dfs(cnt, 10, 10, 1, 0);
}
int main()
{
memset(dp, -1, sizeof(dp));
std::ios::sync_with_stdio(0);
std::cin >> l >> r;
llen = strlen(l);
for (register int i = 0; i < llen; ++i)
{
if (i - 1 >= 0 && l[i] == l[i - 1]) {f = 1; break; }
if (i - 2 >= 0 && l[i] == l[i - 2]) {f = 1; break; }
}
printf("%d", (solve(r) - solve(l) + f + mod) % mod);
}

洛谷 P3413 SAC#1 - 萌数的更多相关文章

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

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

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

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

  3. [洛谷P3413]SAC#1 - 萌数

    题目大意:求$[l,r](0\leqslant l<r< 10^{1001})$中存在长度至少为$2$的回文串的数字数 题解:数位$DP$,发现如果有回文串,若长度为偶数,一定有两个相同的 ...

  4. P3413 SAC#1 - 萌数

    题目 洛谷 数位动规用爆搜真好玩 做法 含有回文串实际我们仅需判断是否有\(2/3\)回文串 \(Dfs(now,num,pre,ly,lead,prel,top)\): 在第\(now\)位 \(n ...

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

    传送门 解题思路 首先这道题如果有两个以上长度的回文串,那么就一定有三个或两个的回文串,所以只需要记录一下上一位和上上位填的数字就行了.数位\(dp\),用记忆化搜索来实现.设\(f[i][j][k] ...

  6. 【洛谷P3413】萌数

    题目大意:求区间 [l,r] 内萌数的个数,其中萌数定义为数位中存在长度至少为 2 的回文子串的数字. 题解:l, r 都是 1000 位级别的数字,显然是一道数位 dp 的题目,暴力直接去世. 发现 ...

  7. 洛谷 P3413 【萌数】

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

  8. 题解 P3413 【SAC#1 - 萌数】

    这道题刚开始正向思维,然后处理重复的时候咕咕了. 参考了@巨型方块 大佬的题解后AC了,在这里就说几个我觉得比较重要或是容易被忽略的点,然后补充一些跳过的证明. 这道题的状态可以设为$dp[i][j] ...

  9. 洛谷 P1045 【麦森数】快速幂

    不用快速幂,压位出奇迹! 本人是个蒟蒻,不太熟悉快速幂,这里给大家介绍一种压位大法. 让我们来分析一下题目,第一位是送分的,有一个专门求位数的函数:n*log10(2)+1. 然后题目中p<=3 ...

随机推荐

  1. 神奇的Invsqrt函数

    float InvSqrt(float x) { float xhalf = 0.5f*x; int i = *(int*)&x; // get bits for floating VALUE ...

  2. 新手上路—Java的"瑞士军刀"

    “ Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大!这在我们的日常开发工作中,无疑是如虎添翼,事半功倍. Jodd = Tools + IoC + MVC ...

  3. 手机如何进入开发者选项--以vivo为例

    发现一个新方法  打开拨号键盘        输入    *#*#7777#*#* 欧儿了

  4. Spring Boot2(十三):整合定时任务发送邮件

    一.前言 主要玩一下SpringBoot的定时任务和发送邮件的功能.定时发送邮件,这在实际生成环境下主要用户系统性能监控时,当超过设定的阙值,就发送邮件通知预警功能.这里只通过简单的写个定时结合邮件通 ...

  5. 最新Centos7.6 部署ELK日志分析系统

    下载elasticsearch 创建elk用户并授权 useradd elk chown -R elk:elk /home/elk/elasticsearch chown -R elk:elk /ho ...

  6. UVA10763 交换学生 Foreign Exchange 题解

    题目链接: https://www.luogu.org/problemnew/show/UVA10763 题目分析: 本题我首先想到的做法是把每一个数都map一下,然后互相判断,例如a,b两人准备交换 ...

  7. 集群之间配置 SSH无密码登录

    集群之间配置 SSH无密码登录 配置 ssh (1)基本语法 ssh 另一台电脑的 ip 地址 (2)ssh 连接时出现 Host key verification failed 的解决方法 # ss ...

  8. mysql8.0.15创建数据库和是删除数据库及用户删除

    1.首先安装mysql8.0.15 2.Mysql8.0.15安装成功后,默认的root用户密码为空,用以下命令来登录root用户: mysql –u root –p 记住密码不用输入 3.进入之后修 ...

  9. springMVC保存数据到mysql数据库中文乱码问题解决方法

    1.web.xml中添加过滤器 <filter> <filter-name>CharacterEncodingFilter</filter-name> <fi ...

  10. Soso(嗖嗖)移动 java 项目

    1.接口 通话服务 package Soso; // 接口 通话服务 public interface CallService { public abstract int call(int minCo ...