时间限制 : 1000 MS 空间限制 : 65536 KB

问题描述

平衡数:对于整数n,以数n中的某一位为支点,第i位上的数的力矩=X[i]*(Pos[i]-Point)其中X[i]为数字n第i位上的数字,Pos[i]为第i位数字的位置编号i,Point为支点的位置编号。如果在数n里能找到一个支点使得所有数的力矩之和为0那么它就是平衡数。
比如4139,以3为支点,左边 = 4 * (4 - 2) + 1 * (3 - 2) = 9,右边 = 9 * (1 - 2) =-9,左边加右边为0,所以4139是平衡数。 现在给出一个区间[l,r],问区间内平衡数有多少个?

输入格式

一行两个整数,L和R。

输出格式

一个整数,表示区间[L,R]中平衡数的个数。

样例输入 1

0 9

样例输出 1

10

样例输入 2

7604 24324

样例输出 2

897

提示

20%的数据:0 ≤L ≤ R ≤ 10^3
100%的数据:0 ≤L ≤ R ≤ 10^18

题解

比较水的一道数位DP,枚举支点,每次都按数位DP的套路讨论即可。注意边界情况,若LL<script type="math/tex" id="MathJax-Element-1">L</script>为0时,每次都会算入一个0的情况,需要去重!

代码

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
ll l,r,p,ans,a[25],b[25],f[25][2][2][4000];
bool flag;
ll DFS(ll cur,ll f1,ll f2,ll val)
{if(val<0) return 0;if(~f[cur][f1][f2][val]) return f[cur][f1][f2][val];if(!cur) return f[cur][f1][f2][val]=(val==0);f[cur][f1][f2][val]=0;if(f1&&f2){for(ll i=0;i<=9;i++) f[cur][f1][f2][val]+=DFS(cur-1,f1,f2,val+i*(cur-p));}else if(f1){for(ll i=0;i<=b[cur];i++)f[cur][f1][f2][val]+=DFS(cur-1,f1,i<b[cur],val+i*(cur-p));}else if(f2){for(ll i=a[cur];i<=9;i++) f[cur][f1][f2][val]+=DFS(cur-1,i>a[cur],f2,val+i*(cur-p));}else{for(ll i=a[cur];i<=b[cur];i++) f[cur][f1][f2][val]+=DFS(cur-1,i>a[cur],i<b[cur],val+i*(cur-p));}return f[cur][f1][f2][val];
}
int main()
{scanf("%lld%lld",&l,&r);if(!l) flag=true;while(l) a[++a[0]]=l%10,l/=10;while(r) b[++b[0]]=r%10,r/=10;for(p=1;p<=b[0];p++){memset(f,-1,sizeof(f));ans+=DFS(b[0],0,0,0);}if(flag) ans-=b[0]-1;printf("%lld\n",ans);return 0;
}

【hdu3709】平衡数相关推荐

  1. 2048. 下一个更大的数值平衡数

    2048. 下一个更大的数值平衡数 如果整数 x 满足:对于每个数位 d ,这个数位 恰好 在 x 中出现 d 次.那么整数 x 就是一个 数值平衡数 . 给你一个整数 n ,请你返回 严格大于 n ...

  2. LeetCode 2048. 下一个更大的数值平衡数(枚举)

    文章目录 1. 题目 2. 解题 1. 题目 如果整数 x 满足:对于每个数位 d ,这个数位 恰好 在 x 中出现 d 次. 那么整数 x 就是一个 数值平衡数 . 给你一个整数 n ,请你返回 严 ...

  3. 数位DP 不断学习中。。。。

    1, HDU 2089  不要62 :http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:不能出现4,或者相邻的62, dp[i][0],表示不存在不吉 ...

  4. ACM之路(16)—— 数位DP

    题目就是kuangbin的数位DP. 先讲C题,不要62,差不多就是一个模板题.要注意的是按位来的话,光一个pos是不够的,还需要一维来记录当前位置是什么数字,这样才能防止同一个pos不同数字的dp值 ...

  5. KD-Tree复习笔记(BZOJ1941 BZOJ2648 BZOJ4066)

    快一年了都没碰到什么必须用KDT的题目导致模板完全忘光了,重新复习了一下. K_Dimention_Tree是一种用来处理二维以上问题的数据结构(OI中一般都是二维),本质是二维启发式估价函数实现剪枝 ...

  6. HDU 3709 Balanced Number

    Balanced Number 题意: 平衡数:存在该数中以一个数字为支点(pivot),点的"力矩"为该点到支点的距离乘以该点的值,而平衡指的是支点两侧的力矩和相等 思路: 易知 ...

  7. (ZT)大学里如何学习 ?

    大学里如何学习 ? 引子 唉,本实在不想发水文的,可还是发了,看来是周末闷骚咯,没兴趣的请赶紧飘过 ~~~ 本篇博文其实是用来给在读大学生一点借鉴的,并不会讨论什么技术类的点 ,所以,不喜欢这种类型文 ...

  8. Python学到什么程度可以面试工作?

    找工作就像找女朋友一样,是一个匹配的过程. 找女朋友:确定目标-互相了解-展现自己-在一起/追不上. 求职:确定求职目标 -了解雇主期望 - 优化求职物料 - 面试谈判. 因此,了解企业需求是基础. ...

  9. SPOJ - BALNUM Balanced Numbers(数位dp+进制转换)

    题目链接:点击查看 题目大意:给出平衡数的定义:每一个偶数出现的次数必须是奇数次,每一个奇数出现的次数必须是偶数次,求给定区间中有多少个平衡数 题目分析:数位dp,这个题目就难在怎么确定状态转移,本来 ...

最新文章

  1. RTOS之uCOS-II源码下载及源码目录结构、常见的RTOS!
  2. ST-Link如何秒变J-link,手把手教你实现该功能
  3. codeforces1455 D. Sequence and Swaps
  4. C | 构成和编码规范
  5. ELKElasticSearch5.1基础概念及配置文件详解【转】
  6. nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题...
  7. Android框架之EventBus的简单使用
  8. 如何查看 Linux 服务器性能参数指标?
  9. LINUX编译:通过prefix把编译结果输出到指定位置
  10. 评价模型——层次分析法
  11. 关于区块链你了解多少,用思维导图带你快速了解区块链
  12. 叶俊:让能量爆棚的秘诀
  13. 如何系统地学习linux
  14. matlab cui,阻力汽车论文,关于基于Matlab-CUI的汽车动力性相关参考文献资料-免费论文范文...
  15. 图像保边滤波算法集锦--非局部均值NLM滤波器
  16. keras使用VGG19网络模型实现风格迁移
  17. SpringBoot application.properties和application.yml配置详解
  18. Windows 98光盘启动安装过程详细图解
  19. 硬盘验证器(硬盘检测工具)v1.7绿色汉化版
  20. 【SVN迁移】SVN迁移服务器代码,包含全部提交日志

热门文章

  1. 【NanoPi T2】 5.uboot gmac网卡驱动(1) - mac控制器,phy芯片,rgmii协议
  2. web前端网页设计期末课程大作业:企业网页主题网站设计——舞蹈培训11页HTML+CSS+JavaScript
  3. 递归-PTA循环日程表
  4. 一起零基础学Python
  5. 唯品会5580万美元注资东方风行
  6. 保障信息安全不违规,App应满足哪些法律规定
  7. vert.x web模块(七)
  8. 文创样机大合集100套,设计师必备
  9. 一些中文字体的英文名
  10. 年三十 放鞭炮 驱年兽 迎新春 财运到 兔年大吉