[洛谷P3413]SAC#1 - 萌数
题目大意:求$[l,r](0\leqslant l<r< 10^{1001})$中存在长度至少为$2$的回文串的数字数
题解:数位$DP$,发现如果有回文串,若长度为偶数,一定有两个相同的数字相邻;若长度为奇数,一定有两个相同的数字中间间隔一个数字。所以只需要记录前两个数字就行了。注意判断$l$是否符合条件。
卡点:无
C++ Code:
#include <cstdio>
#include <algorithm>
#include <cstring>
#define maxn 1010
const long long mod = 1e9 + 7; char l[maxn], r[maxn];
int num[maxn], tot;
long long f[maxn][11][11][2];
long long calc(int x, int lim, int lead, int lst_2, int lst, int had) {
if (!x) return had;
long long F = f[x][lst_2][lst][had];
if (!lim && lead && ~F) return F;
F = 0;
for (int i = lim ? num[x] : 9, op = 1; ~i; i--, op = 0) {
F += calc(x - 1, lim && op, lead || i, lst, (lead || i) ? i : 10, had || (i == lst_2) || (i == lst));
}
F %= mod;
if (!lim && lead) f[x][lst_2][lst][had] = F;
return F;
}
long long solve(char *x) {
int len = strlen(x);
for (int i = 0; i < len; i++) num[len - i] = x[i] & 15;
return calc(len, 1, 0, 10, 10, 0);
}
long long check(char *x) {
int len = strlen(x);
for (int i = 1; i < len; i++) if (x[i] == x[i - 1]) return 1;
for (int i = 2; i < len; i++) if (x[i] == x[i - 2]) return 1;
return 0;
} int main() {
scanf("%s%s", l, r);
memset(f, -1, sizeof f);
printf("%lld\n", (solve(r) - solve(l) + mod + check(l)) % mod);
return 0;
}
[洛谷P3413]SAC#1 - 萌数的更多相关文章
- 洛谷P3413 SAC#1 - 萌数 题解 数位DP
题目链接:https://www.luogu.com.cn/problem/P3413 题目大意: 定义萌数指:满足"存在长度至少为2的回文子串"的数. 求区间 \([L,R]\) ...
- 洛谷P3413 SAC#1 - 萌数(数位dp)
题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数:1 ...
- 洛谷 P3413 SAC#1 - 萌数
题意简述 求l~r之间存在长度至少为2的回文子串的正整数的个数 题解思路 数位DP 注意到有偶数长度的回文串必有长度为2的回文串,有奇数长度的回文串必有长度为3的回文串 所以只需判断与前一位,前两位是 ...
- P3413 SAC#1 - 萌数
题目 洛谷 数位动规用爆搜真好玩 做法 含有回文串实际我们仅需判断是否有\(2/3\)回文串 \(Dfs(now,num,pre,ly,lead,prel,top)\): 在第\(now\)位 \(n ...
- LUOGU P3413 SAC#1 - 萌数(数位dp)
传送门 解题思路 首先这道题如果有两个以上长度的回文串,那么就一定有三个或两个的回文串,所以只需要记录一下上一位和上上位填的数字就行了.数位\(dp\),用记忆化搜索来实现.设\(f[i][j][k] ...
- 【洛谷P3413】萌数
题目大意:求区间 [l,r] 内萌数的个数,其中萌数定义为数位中存在长度至少为 2 的回文子串的数字. 题解:l, r 都是 1000 位级别的数字,显然是一道数位 dp 的题目,暴力直接去世. 发现 ...
- 洛谷 P3413 【萌数】
敲完这篇题解,我就,我就,我就,嗯,好,就这样吧... 思路分析: 首先我们要知道一个回文串的性质--假如说一个[l-1,r+1]的串是回文的,那么[l,r]一定也是回文的. 所以我们只要记录前一个数 ...
- 题解 P3413 【SAC#1 - 萌数】
这道题刚开始正向思维,然后处理重复的时候咕咕了. 参考了@巨型方块 大佬的题解后AC了,在这里就说几个我觉得比较重要或是容易被忽略的点,然后补充一些跳过的证明. 这道题的状态可以设为$dp[i][j] ...
- 洛谷 P1045 【麦森数】快速幂
不用快速幂,压位出奇迹! 本人是个蒟蒻,不太熟悉快速幂,这里给大家介绍一种压位大法. 让我们来分析一下题目,第一位是送分的,有一个专门求位数的函数:n*log10(2)+1. 然后题目中p<=3 ...
随机推荐
- sql server,mysql,oracle平时用法的区别
由于工作的原因,上家公司一直使用的oracle,后来接触了的几个项目,既有使用mysql的又有使用sqlserver,自己在使用sqlserver及mysql要实现某功能时,经常要在网上找来找去,所以 ...
- 一些android的日常笔记
1.textview文本:如果内容多的话,设置下面的一行代码,可以实现滑动. text.setMovementMethod(ScrollingMovementMethod.getInstance()) ...
- Hadoop==zookeeper
Zookeeper 每一个专业的技术总可以在生活中找到相应的实例,就比如说zookeeper,攘其外必先安其内就很好的解释了zookeeper,Hadoop集群的组件中的很多在学习的时候都会觉得每一个 ...
- 爬虫之request模块高级
一.cookie&session cookie:服务器端使用cookie来记录客户端的状态信息 实现流程: 执行登陆操作(获取cookie) 在发起个人主页请求时,需要将cookie携带到该请 ...
- jmeter 插件安装
1.下载Plugins Manager插件 打开下载插件地址:https://jmeter-plugins.org/ 2.将下载的plugins-manager.jar包复制到Jmeter安装目录,l ...
- linux下SVN CVS命令大全
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn: // 192.168. 1.1 / pro / doma ...
- 回形矩阵--python
def bsm(n): a = [[0]*n for x in range(n)] p = 0 q = n-1 t = 1 while p < q: for i in range(p,q): a ...
- JAVA反射之 Field (属性)
主要方法: public static void main(String[] args) throws Exception { Class<?> clazz = Class.forName ...
- Linux系统下安装rz/sz命令
执行命令 yum install -y lrzsz rz -be本地上传文件到服务器
- JavaScript---设计模式之迭代器模式
迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该方法中的内部表示. jQuery中我们经常会用到一个each函数就是迭代器模式 作用 为遍历不同的集合结构提供一个统一的接口,从而 ...