P3413 SAC#1 - 萌数
题目
洛谷
数位动规用爆搜真好玩
做法
含有回文串实际我们仅需判断是否有\(2/3\)回文串
\(Dfs(now,num,pre,ly,lead,prel,top)\):
在第\(now\)位
\(now-1\)位,\(now-2\)位
是否合法
\(now-1\)位是否为前导\(0\),\(now-2\)为是否为前导\(0\)
是否受限
My complete code
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL maxn=1009,p=1e9+7;
LL ans;
LL a[maxn],f[maxn][10][10][2][2][2];
char s1[maxn],s2[maxn];
LL Dfs(LL now,LL num,LL pre,LL ly,LL lead,LL prel,LL top){
if(!now) return ly;
if(!top && f[now][num][pre][ly][lead][prel]!=-1) return f[now][num][pre][ly][lead][prel];
LL ret(0);
LL Up=top?a[now]:9;
for(LL i=0;i<=Up;++i)
(ret+=Dfs(now-1,i,num,ly||(!lead&&i==num)||(!prel&&i==pre),lead&&!i,lead,top&&(i==Up))%p)%=p;
if(!top) f[now][num][pre][ly][lead][prel]=ret;
return ret;
}
int main(){
scanf(" %s %s",s1+1,s2+1);
LL nl(strlen(s1+1)),nr(strlen(s2+1));
LL tot(0);
for(LL i=nr;i>=1;--i) a[++tot]=s2[i]-'0';
memset(f,-1,sizeof(f));
ans+=Dfs(tot,0,0,0,1,1,1);
tot=0;
for(LL i=nl;i>=1;--i) a[++tot]=s1[i]-'0';
if(nl==1 && a[1]==0){
cout<<ans;
return 0;
}
--a[1];
LL now(1);
while(a[now]<0){
a[now]=9;
--a[++now];
}
while(a[tot]==0) --tot;
ans=(ans-Dfs(tot,0,0,0,1,1,1)+p)%p;
cout<<ans;
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](0\leqslant l<r< 10^{1001})$中存在长度至少为$2$的回文串的数字数 题解:数位$DP$,发现如果有回文串,若长度为偶数,一定有两个相同的 ...
- LUOGU P3413 SAC#1 - 萌数(数位dp)
传送门 解题思路 首先这道题如果有两个以上长度的回文串,那么就一定有三个或两个的回文串,所以只需要记录一下上一位和上上位填的数字就行了.数位\(dp\),用记忆化搜索来实现.设\(f[i][j][k] ...
- 洛谷 P3413 SAC#1 - 萌数
题意简述 求l~r之间存在长度至少为2的回文子串的正整数的个数 题解思路 数位DP 注意到有偶数长度的回文串必有长度为2的回文串,有奇数长度的回文串必有长度为3的回文串 所以只需判断与前一位,前两位是 ...
- 题解 P3413 【SAC#1 - 萌数】
这道题刚开始正向思维,然后处理重复的时候咕咕了. 参考了@巨型方块 大佬的题解后AC了,在这里就说几个我觉得比较重要或是容易被忽略的点,然后补充一些跳过的证明. 这道题的状态可以设为$dp[i][j] ...
- luogu 3413 SAC#1 - 萌数
题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数:1 ...
- [LUOGU3413] SAC#1 - 萌数
题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数 ...
- [luoguP3413] SAC#1 - 萌数(数位DP)
传送门 gtm的数位dp! 看到好多题解,都是记忆化搜索,好像非常方便啊,但是我还是用递推好了,毕竟还是有些类似数位dp的题用递推的思路,记忆化做不了,现在多培养一下思路 首先这道题, 只看长度大于等 ...
随机推荐
- CodeAreaFX
CodeAreaFX is a text area for JavaFX with API to style ranges of text. It is intended as a base for ...
- jq serialize 系列化 乱码 解决办法
query = form.find('input,select,textarea').serialize(); $.post(target,decodeURIComponent(query)).suc ...
- eclipse 打开的时候弹出 'Building workspace' has encountered a problem. Errors occurred during
Eclipse 里面project->Build Automatically上的对勾去掉
- Servlet 客户端 HTTP 请求
当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP 协议 了解更多相关信息. 以下是来自于浏 ...
- SlidingMenu官方实例分析8——CustomAnimation
CustomAnimation 构造方法: 其中CanvasTransformer对象是重点,因为他是实现动画的对象,设置对象的代码如下: 其中变化方法如下: 其中的canvas.scale(),方法 ...
- cocos2D 虚拟摇杆Joystick功能实现
@implementation InputLayer - (id)init { if(self = [super init]) { ...
- Kotlin——初级篇(二):变量、常量、注释
在Kotlin中的变量.常量以及注释多多少少和Java语言是有着不同之处的.不管是变量.常量的定义方式,还是注释的使用.下面详细的介绍Kotlin中的变量.常量.注释的使用.以及和Java的对比. 如 ...
- 记录--java 分页 思路 (hibernate关键代码)
有时会脑袋蒙圈,记录下分页的思路 下面代码是hibernate的分页,其分页就是从第几条数据为起点,取几条数据.比如在mysql中的limit(5,10)取的就是第6条到第10条 在下面代码中的pag ...
- VS的编译选项
转载下,对于VS的编译选项介绍蛮清楚的!! 1. 静态链接库.动态链接库.CRT.STL 我们要到一个函数,要么是需要该函数的源代码,要么是知道该函数的声明并有该函数的实现,这里的“实现”又分为静态链 ...
- python多线程与多进程的区别
在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie).所以,有必要对每个Process对象调用join()方法 (实际上等同于wait).对于多 ...