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的题用递推的思路,记忆化做不了,现在多培养一下思路 首先这道题, 只看长度大于等 ...
随机推荐
- Spring MVC文本域
以下示例显示如何在使用Spring Web MVC框架的表单中使用文本域(TextArea).首先使用Eclipse IDE来创建一个WEB工程,并按照以下步骤使用Spring Web Framewo ...
- spring 整合mybatis 学习笔记
1.1 环境准备 java环境: jdk1.7.0_72 eclipse indigo springmvc版本:spring3.2 所需要的jar包: 数据库驱动包:mysql5.1 mybatis ...
- Spark OOM:java heap space,OOM:GC overhead limit exceeded解决方法
问题描述: 在使用spark过程中,有时会因为数据增大,而出现下面两种错误: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMe ...
- CStdioFile UNICODE编译 读取中文汉字乱码 .
函数原形为:char *setlocale( int category, const char *locale );头文件:<locale.h>所支持的操作系统为:ANSI, Win 95 ...
- 使用PHP创建一个socket服务端
与常规web开发不同,使用socket开发可以摆脱http的限制.可自定义协议,使用长连接.PHP代码常驻内存等.学习资料来源于workerman官方视频与文档. 通常创建一个socket服务包括这几 ...
- adb连接夜神模拟器
1.打开夜神模拟器,打开设置,调成手机模式,初次进入的话,进入设置,点击版本号5次,可以激活使用开发者模式,进入后打开USB调试功能 2.打开文件资源管理器,进入夜神模拟器的安装位置,在地址栏输入cm ...
- 2、ACE-实用生活口语-介绍 Introductions
(1) (2) (3)认识你很荣幸,如何称呼您呢?It's a pleasure to meet you.I'm glad to meet you.May I have your name?How s ...
- lua(仿单继承)
--lua仿单继承 Account = { balance = } function Account:new(o) o = o or {} setmetatable(o, self)--Account ...
- knockoutJs在移动设备上有时无法更新控件值
最近在用cordova(phonegap)写一个移动app,表单比较复杂,用了knockoutJs作为前端的MVVM框架进行数据绑定. 但是发现有时候(其实是每次)如果最后在input中编辑一个值,然 ...
- Java格式化日期的三种方式
1)借助DateFormat类: public String toString(Date d) { SimpleDateFormat sdf = new SimpleDateFormat(“yyyy- ...