题目链接

小Z的 k 紧凑数

解题思路

数位DP,把每一个数位的每一个数对应的可能性表示出来,然后求\(num(1,r)-num(1,l-1)\),其中\(num(i,j)\)表示\([i,j]\)区间里符合要求的数的个数。

其中,\(dp[i][j]\)表示第\(i\)位数字为\(j\)的选择种数。

计算的时候,比如\(num(456)\),就拆开为\(num(1,99)+num(100,399)+num(400,449)+num(450,455)+num(456,456)\)

AC代码

#include<stdio.h>
long long k,dp[20][14],l,r;
int absf(int a){
if(a<0)return -a;
return a;
}
void dpf(){
int i,j,m;
for(i=0;i<=9;i++)dp[0][i]=1;//个位数,初始化为1
for(i=1;i<20;i++)//这是总共的位数
for(j=0;j<=9;j++)//这是这一位
for(m=0;m<=9;m++)//这是上一位
if(absf(j-m)<=k)dp[i][j]+=dp[i-1][m];//这一位和上一位满足条件则加上
}
long long num(long long x){
int n[20]={0},cnt=0,i,j;
long long ans=0;
while(x>0){
n[cnt++]=x%10;
x/=10;
}
//首位为0
for(i=0;i<cnt-1;i++)
for(j=1;j<=9;j++)
ans+=dp[i][j];
//首位为[1,n[cnt-1])
if(cnt>0)for(i=1;i<n[cnt-1];i++)ans+=dp[cnt-1][i];
//首位为n[cnt-1]
for(i=cnt-2;i>=0;i--){
for(j=0;j<n[i];j++){
if(absf(n[i+1]-j)<=k)ans+=dp[i][j];
}
if(absf(n[i+1]-n[i])>k)break;
//非常重要!!前几位已经不满足绝对值之差不大于k之后就不能再继续下去了
if(!i&&absf(n[i+1]-j)<=k)ans+=dp[i][j];//这里相当于计算那个num(456,456)
}
if(cnt==1)ans++;//这里也相当于计算那个num(456,456),但是个位数不会进入上面那个循环
return ans;
}
int main(){
scanf("%lld%lld%lld",&l,&r,&k);
dpf();
printf("%lld",num(r)-num(l-1));
return 0;
}

P2188 小Z的 k 紧凑数 题解(数位DP)的更多相关文章

  1. 洛谷P2188 小Z的 k 紧凑数

    P2188 小Z的 k 紧凑数 题目描述 小 Z 在草稿纸上列出了很多数,他觉得相邻两位数字差的绝对值不超过 k 的整数特别奇特,称其为 k 紧凑数. 现在小 Z 想知道 [l,r] 内有多少个 k ...

  2. luogu2657-Windy数题解--数位DP

    题目链接 https://www.luogu.org/problemnew/show/P2657 分析 第一道数位DP题,发现有点意思 DP求\([L,R]\)区间内的XXX个数,很套路地想到前缀和, ...

  3. HDU4352 XHXJ's LIS 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 题目大意: 求区间 \([L,R]\) 范围内最长上升子序列(Longest increasin ...

  4. HDU5179 beautiful number 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5179 题目大意: 给你一个数 \(A = a_1a_2 \cdots a_n\) ,我们称 \(A\) ...

  5. Ural1057. Amount of Degrees 题解 数位DP

    题目链接: (请自行百度进Ural然后查看题号为1057的那道题目囧~) 题目大意: Create a code to determine the amount of integers, lying ...

  6. POJ-2282题解&数位DP总结

    一.题意 给定一个区间[a, b](注意输入的时候可能a > b,所以,在数据输入后,要先比较a和b,如果a > b,交换a和b的值),统计这个区间里面,数位上有多少个0.多少个1.--. ...

  7. 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ...

  8. 洛谷P3413 SAC#1 - 萌数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P3413 题目大意: 定义萌数指:满足"存在长度至少为2的回文子串"的数. 求区间 \([L,R]\) ...

  9. HDU3886 Final Kichiku “Lanlanshu” 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3886 题目大意: 给一定区间 \([A,B]\) ,一串由 /, \ , - 组成的符号串.求满足符号 ...

随机推荐

  1. kubernetes实战-交付dubbo服务到k8s集群(一)准备工作

    本次交付的服务架构图:因为zookeeper属于有状态服务,不建议将有状态服务,交付到k8s,如mysql,zk等. 首先部署zk集群:zk是java服务,需要依赖jdk,jdk请自行下载: 集群分布 ...

  2. JPG学习笔记1(附完整代码)

    #topics h2 { background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, ...

  3. 宝塔面板&FLASK&centos 7.2 &腾讯云 配置网站出现的若干问题

    1.解决跨域问题&&中文显示问题 from flask import Flask, url_for, request, render_template, redirect from f ...

  4. HDU 6390 GuGuFishtion(莫比乌斯反演 + 欧拉函数性质 + 积性函数)题解

    题意: 给定\(n,m,p\),求 \[\sum_{a=1}^n\sum_{b=1}^m\frac{\varphi(ab)}{\varphi(a)\varphi(b)}\mod p \] 思路: 由欧 ...

  5. git & Angular git commit 规范

    git & Angular git commit 规范 https://github.com/angular/angular/commits/master https://github.com ...

  6. CSS Dark Mode

    CSS Dark Mode https://kevq.uk/automatic-dark-mode/ https://kevq.uk/how-to-add-css-dark-mode-to-a-web ...

  7. 官网GitLab CI/CD英文文档翻译

    在查阅GitLab官网的CI/CD功能说明时,全是英文看起来不方便,通过翻译软件自动翻译后"内容失真",看起来很变扭.查阅了百度上的资料发现很多翻译很老旧,有些甚至是挂羊头卖狗肉. ...

  8. [C语言学习笔记五]复合语句和操作符的区分

    复合语句的概念和用法 在部分时候,语句必须要与其他语句相结合才能实现应有的功能.放在花括号 {} 里的代码叫做复合语句. 例如: int a,b; if (a == b) ... ... /* 这一部 ...

  9. img图片默认的3px空白缝隙解决方法

    img{display:block;} 表示将img标签,即图片标签由行内元素变成一个块级元素. 一般在制作轮播网页或使用到img图片时,我们都会对图片设置img{display:bolck}.因为i ...

  10. iframe重定向问题

    sandbox="allow-forms allow-scripts allow-same-origin allow-popups"