description

如果一个字符串从后往前读与从前往后读一致,我们则称之为回文字符串。当一个数字不包含长度大于1的子回文数字时称为非回文数字。例如,16276是非回文数字,但17276不是,因为它包含回文数字727。

你的任务是在一个给定的范围内计算非回文数字的总数。


analysis

  • 平生最怂的数位\(DP\),询问自然拆开两段做

  • 设\(f[i][j][k][0/1]\)表示做到第\(i\)位、第\(i\)位数字为\(j\)、第\(i-1\)位数字为\(k\)、是否刚好顶上界的合法方案数

  • 转移自然就是\(f[i][j][k][0]+=f[i-1][k][num][0/1]\),注意顶到或不到上界的转移不同

  • 可以知道这样前导\(0\)很难搞,可以换个方法

  • 设\(g[i][j][k]\)表示做到第\(i\)位、第\(i\)位数字为\(j\)、第\(i-1\)位数字为\(k\)的方案数,另外单独转移

  • 也就是说位数不足的一定比原数要小,不需理会上界,相当于这些数都有前导\(0\),都算过了

  • 即钦定\(f\)和\(g\)第一位均不为\(0\)开始\(DP\),最后统计答案把\(f\)和\(g[1..位数-1]\)加一起就好了


code

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define ll long long
#define fo(i,a,b) for (ll i=a;i<=b;++i)
#define fd(i,a,b) for (ll i=a;i>=b;--i) using namespace std; ll f[20][10][10][2];
ll g[20][10][10];
ll a[20];
ll l,r,mx; inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline ll get(ll x)
{
if (x<10)return x;
mx=floor(log10(x)+1);
fd(i,mx,1)a[i]=x%10,x/=10;
memset(f,0,sizeof(f));
memset(g,0,sizeof(g));
f[1][a[1]][0][1]=1;
fo(i,1,a[1]-1)f[1][i][0][0]=1;
fo(i,1,9)g[1][i][0]=1;
fo(i,2,mx)
fo(j,0,9)//第i位的数字
fo(k,0,9)//第i-1位的数字
{
if (j==k)continue;
fo(num,0,9)//第i-2位的数字
{
if (i>2 && num==j)continue;
g[i][j][k]+=g[i-1][k][num];
if (j==a[i] && k==a[i-1])
{
f[i][j][k][0]+=f[i-1][k][num][0],
f[i][j][k][1]+=f[i-1][k][num][1];
}
else
{
if (k<a[i-1] || (k==a[i-1] && j<a[i]))
f[i][j][k][0]+=f[i-1][k][num][0]+f[i-1][k][num][1];
else f[i][j][k][0]+=f[i-1][k][num][0];
}
}
}
ll ans=0;
fo(i,1,mx-1)fo(j,0,9)fo(k,0,9)ans+=g[i][j][k];
fo(i,0,9)fo(j,0,9)ans+=f[mx][i][j][0]+f[mx][i][j][1];
return ans;
}
int main()
{
l=read(),r=read();
printf("%lld\n",get(r)-get(l-1));
return 0;
}

【JZOJ3316】非回文数字的更多相关文章

  1. [LeetCode] Palindrome Number 验证回文数字

    Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ...

  2. javascript 实现一个回文数字

    写一个方法,让"1234"变成回文数字“1234321”,就是顺着读和倒着读都是一样的:注:不让用reverse()方法: function palindrome(str){ va ...

  3. UVALive 2889(回文数字)

    题意:给定i,输出第i个回文数字. 分析:1,2,3,4,……,9------------------------------------------------------------------- ...

  4. Java 简单算法--打印回文数字

    package cn.magicdu.algorithm; public class CircleNumber { public static void main(String[] args) { f ...

  5. [蓝桥杯]PREV-21.历届试题_回文数字

    问题描述 观察数字:, 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做:回文数字. 本题要求你找到一些5位或6位的十进制数字.满足如下要求: 该数字的各个数位之和等于输入 ...

  6. 【蓝桥杯】PREV-21 回文数字

    题目链接:http://lx.lanqiao.org/problem.page? gpid=T113   历届试题 回文数字   时间限制:1.0s   内存限制:256.0MB      问题描写叙 ...

  7. LeetCode 9 Palindrome Number(回文数字判断)

    Long Time No See !   题目链接https://leetcode.com/problems/palindrome-number/?tab=Description   首先确定该数字的 ...

  8. 算法笔记_181:历届试题 回文数字(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做:回文数字. 本题要求你找 ...

  9. 《LeetBook》leetcode题解(9):Palindrome Number[E]——回文数字

    我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 地址:https://github.com/hk029/leetcode 这 ...

随机推荐

  1. 事件绑定addEventListener

    通过addEventListener监听函数实现的dom事件绑定 addEventListener可以为当前dom添加一个事件(这个事件可以是个已有的事件),这就无法避免我们在写代码的时候重复去绑定同 ...

  2. Typora--终于找到一个能够解决将csdn文章同步到hexo的完美编辑器(解决csdn图片防盗链导致无法直接复制文章的问题)。

    文章目录 需求 背景 新宠 告诉我,我的名字叫什么?大声点我听不见~ 页面 神奇之处 看得见的优点 如何设置项目根目录 如何显示图片? 于是最终操作流程 个人博客:https://mmmmmm.me ...

  3. 网络安全系列 之 TLS/SSL基本原理

    1. TLS/SSL基本工作方式: TLS/SSL的功能实现主要依赖于三类基本算法(参见"网络安全系列 之 密码算法"): 非对称加密算法:实现身份认证和密钥协商 对称加密算法: ...

  4. 基于airtest的朋友圈自动点赞

    本脚本可以通过AirtestIDE和python执行,推荐使用AirtestIDE的环境执行,更稳定一些 AirtestIDE官方文档 使用python执行该脚本 安装库 airtest.pocoui ...

  5. 使用python和tushare股票交易日历数据,判断节假日周末休市

    接口:trade_cal 描述:获取各大交易所交易日历数据,默认提取的是上交所 注:tushare模块下载和安装教程,请查阅我之前的文章 输入参数 名称       |       类型        ...

  6. HDU 2167 状压dp方格取数

    题意:给出一个数表,规定取出一个数后周围的八个数都不可取,求可获得的最大数字和 思路:状态压缩dp,每一行的取数方法为状态,显然,由于取数规则的限制,可取的状态并不是 1<<size_co ...

  7. java.sql.SQLException: validateConnection false

    -- :: --- [Create-] com.alibaba.druid.pool.DruidDataSource : create connection error java.sql.SQLExc ...

  8. 【ASP.Net Core】不编译视图文件

    原文:[ASP.Net Core]不编译视图文件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aqtata/article/details/818 ...

  9. 归档和解档配合NSFile存储数据

    NSString *Name = @"yc"; //第一个常量NSDocumentDirectory表示正在查找沙盒Document目录的路径(如果参数为NSCachesDirec ...

  10. IdentityServer_0_参考资料

    官方 项目地址:https://github.com/IdentityServer/IdentityServer4 官方Demo:https://github.com/IdentityServer/I ...