[Luogu] P3413 萌数
题目背景
本题由世界上最蒟蒻最辣鸡最撒比的SOL提供。
寂月城网站是完美信息教室的官网。地址:已和谐 。
题目描述
辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌!
好在在他眼里,并不是所有数都是萌的。只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数;110是萌的,因为包含回文子串11;但是102不是萌的,1201也不是萌的。
现在SOL想知道从l到r的所有整数中有多少个萌数。
由于答案可能很大,所以只需要输出答案对1000000007(10^9+7)的余数。
输入输出格式
输入格式:
输入包含仅1行,包含两个整数:l、r。
输出格式:
输出仅1行,包含一个整数,即为答案。
输入输出样例
1 100
10
100 1000
253
说明
记n为r在10进制下的位数。
对于10%的数据,n <= 3。
对于30%的数据,n <= 6。
对于60%的数据,n <= 9。
对于全部的数据,n <= 1000,l < r。
题目解析
数位DP,难度一般
因为数据比较水所以我先预处理出1~1000的萌数
处理需要技巧,因为萌数有两种:相邻数相同和隔一个数相同,直接做会难以去重。所以我们搞一搞,用容斥就不需要去重了。
dp[i][j][k] 表示第i位是j,第i-1位是k的萌数数量,进行数位dp即可。
Code
#include<bits/stdc++.h>
using namespace std; const long long MAXN = + ;
const long long p = 1e9 + ; long long dp[MAXN][][];
//到第i位时,i位是j,i-1位是k,有多少不萌的数。
long long ans;
string l,r; long long find_ans(long long n,string s) {
long long x = -,y = -;
long long tot = ,res = ;
bool flag = true;
for(long long i = ; i < n; i++) {
tot = (tot * + s[i] - '') % p;
}
for(long long i = ; i < n; i++) {
for(long long j = ; j <= ; j++) {
for(long long k = ; k <= ; k++) {
res = (res + dp[i][j][k]) % p;
}
}
}
if(n > ) res += ;
for(long long i = n; i > ; i--) {
long long tmp = s[n - i] - '';
for(long long j = ; j < tmp; j++) {
if(i == n && j == ) continue;
for(long long k = ; k <= ; k++) {
if(x != j && y != j && j != k && k != x) {
res += dp[i][j][k];
res %= p;
}
}
}
if(tmp == x||tmp == y) {
flag = false;
break;
}
y = x;
x = tmp;
}
if(flag) {
for(long long j = ; j <= s[n - ] - ''; j++) {
if(j != y && j != x) {
res++;
res %= p;
}
}
}
return (tot + - res + p) % p;
} int main() {
cin >> l >> r;
for(long long i = ; i <= ; i++) {
for(long long j = ; j <= ; j++) {
for(long long k = ; k <= ; k++) {
if(j == k) continue;
for(long long l = ; l <= ; l++) {
if(j != l && k != l) dp[i][j][k] += dp[i - ][k][l];
}
if(i == ) dp[i][j][k]++;
dp[i][j][k] %= p;
}
}
}
ans = (long long)(find_ans(r.length(),r) - find_ans(l.length(),l)) % p;
for(long long i = ; i <= l.length(); i++) {
if(l[i] == l[i - ] || (i > && l[i] == l[i - ])) {
ans++;
ans %= (long long)p;
break;
}
}
printf("%lld",ans);
return ;
}
[Luogu] P3413 萌数的更多相关文章
- 洛谷$P3413$ 萌数 $SAC\#1$ 数位$dp$
正解:数位$dp$ 解题报告: 传送门! 非常套路的数位$dp$,,,?打起来就很爽昂,,,不要脑子,我就很爱嘻嘻嘻 然后$[l,r]$这种问题不显然考虑套路地搞成$[1,l-1]$和$[1,r]$嘛 ...
- 洛谷P3413 SAC#1 - 萌数 题解 数位DP
题目链接:https://www.luogu.com.cn/problem/P3413 题目大意: 定义萌数指:满足"存在长度至少为2的回文子串"的数. 求区间 \([L,R]\) ...
- luogu 3413 SAC#1 - 萌数
题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数:1 ...
- 洛谷P3413 SAC#1 - 萌数(数位dp)
题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数:1 ...
- 题解 P3413 【SAC#1 - 萌数】
这道题刚开始正向思维,然后处理重复的时候咕咕了. 参考了@巨型方块 大佬的题解后AC了,在这里就说几个我觉得比较重要或是容易被忽略的点,然后补充一些跳过的证明. 这道题的状态可以设为$dp[i][j] ...
- 【洛谷P3413】萌数
题目大意:求区间 [l,r] 内萌数的个数,其中萌数定义为数位中存在长度至少为 2 的回文子串的数字. 题解:l, r 都是 1000 位级别的数字,显然是一道数位 dp 的题目,暴力直接去世. 发现 ...
- 洛谷 P3413 【萌数】
敲完这篇题解,我就,我就,我就,嗯,好,就这样吧... 思路分析: 首先我们要知道一个回文串的性质--假如说一个[l-1,r+1]的串是回文的,那么[l,r]一定也是回文的. 所以我们只要记录前一个数 ...
- [luogu3413]萌数
[luogu3413]萌数 luogu 考虑数位dp 怎么判断一个数是不是萌数? 只要知道其中某一位和它的前一位相等或者和前一位的前一位相等,那么它就是一个萌数 什么样的数不是萌数? 对于它的每一位都 ...
- [LUOGU3413] SAC#1 - 萌数
题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数 ...
随机推荐
- 辛星浅谈mysql中的数据碎片以及引擎为MyISAM下的操作
对于mysql中的数据碎片,事实上和我们删除数据是息息相关的,删除数据的时候必定会在数据文件里造成不连续的空白空间,对于少量的数据的删除,并不会产生多少的空白空间.假设在一段时间内的大量的删除操作,会 ...
- DM8168 dead JTAG clock
针对新板调试,不针对EVM板. TI XDS560连上DM8168 20pin仿真接口 launch 8168.ccxml,右击CortexA8,选择Connect Target 出现错误例如以下: ...
- LLDB 常用命令
dump: memory read --force --outfile [文件名] --binary [start_address] [end_address] 查找函数地址: 对于有调试符号的这样使 ...
- FourCC
https://en.wikipedia.org/wiki/FourCC A FourCC (literally, four-character code) is a sequence of four ...
- 在C#中实现listbox的项上下移动(winform) 标准
在C#中实现listbox的项上下移动(winform) 收藏人:梅毛子360 2013-10-02 | 阅:1 转:2 | 分享 | 来源 usi ...
- win32 API函数
cozy的博文 win32 API函数大全 (2008-03-15 16:28) 分类: 个人日记 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WN ...
- influx测试——单条读性能很差,大约400条/s,批量写性能很高,7万条/s,总体说来适合IOT数据批量存,根据tag查和过滤场景,按照时间顺序返回
测试准备 需要将InfluxDB的源码放入 go/src/github.com/influxdata 目录 单写测试代码(write1.go): package main import ( " ...
- bzoj 1822 冷冻波
题目大意: 在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵 我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线距离不超过R,且巫妖和小精灵的 ...
- [BZOJ 3126] Photo
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3126 [算法] 差分约束系统 注意SPFA判负环的条件应为 : 若所有点入队次数之和 ...
- Poj2054 color a tree && [HNOI/AHOI2018]排列
https://zybuluo.com/ysner/note/1120723 题面 原题 某省选强化题 大致意思是给你一颗树,选父亲后才能选儿子. 每个点对答案的贡献为你在第几次选这个点 × 该点权值 ...