[HDU3709]Balanced Number
[HDU3709]Balanced Number
试题描述
to calculate the number of balanced numbers in a given range [x, y].
输入
The input contains multiple test cases. The first line is the total number of cases T (0 < T ≤ 30). For each case, there are two integers separated by a space in a line, x and y. (0 ≤ x ≤ y ≤ 1018).
输出
For each case, print the number of balanced numbers in the range [x, y] in a line.
输入示例
输出示例
数据规模及约定
见“输入”
题解
令 f[k][i][j][s] 表示考虑数的前 i 位,最高位为 j,支点在位置 k,支点右力矩 - 左力矩 = s 的数有多少个。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <algorithm>
using namespace std;
#define LL long long LL read() {
LL x = 0, f = 1; char c = getchar();
while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
return x * f;
} #define maxn 20
#define maxs 1800
LL f[maxn][maxn][10][maxs]; int num[maxn];
LL sum(LL x) {
if(!x) return 1;
int cnt = 0; LL tx = x;
while(x) num[++cnt] = x % 10, x /= 10;
LL ans = 0;
for(int i = cnt - 1; i; i--)
for(int k = 1; k <= i; k++)
for(int j = 1; j <= 9; j++) ans += f[k][i][j][0];
for(int i = cnt; i; i--) {
for(int k = cnt; k; k--) {
int s = 0;
for(int x = cnt; x > i; x--) s += (x - k) * num[x];
if(s < 0 || s >= maxs) continue;
for(int j = i < cnt ? 0 : 1; j < num[i]; j++) {
ans += f[k][i][j][s];
// if(!j && !s && i > 1) ans--;
}
}
}
for(int k = 1; k <= cnt; k++) {
int s = 0;
for(int x = 1; x <= cnt; x++) s += (x - k) * num[x];
if(!s){ ans++; break; }
}
ans++;
return ans;
} int main() {
for(int j = 0; j <= 9; j++) f[1][1][j][0] = 1;
for(int k = 2; k < maxn; k++)
for(int j = 0; j <= 9; j++) f[k][1][j][(k-1)*j] = 1;
for(int k = 1; k < maxn; k++)
for(int i = 1; i < maxn - 1; i++)
for(int j = 0; j <= 9; j++)
for(int s = 0; s < maxs; s++) if(f[k][i][j][s]) {
for(int x = 0; x <= 9 && s + (k - i - 1) * x >= 0; x++)
if(s + (k - i - 1) * x < maxs) f[k][i+1][x][s+(k-i-1)*x] += f[k][i][j][s];
// printf("%d %d %d %d: %lld\n", k, i, j, s, f[k][i][j][s]);
}
int T = read();
while(T--) {
LL l = read(), r = read();
LL ans = sum(r); if(l) ans -= sum(l - 1);
printf("%lld\n", ans);
} return 0;
}
[HDU3709]Balanced Number的更多相关文章
- HDU3709 Balanced Number —— 数位DP
题目链接:https://vjudge.net/problem/HDU-3709 Balanced Number Time Limit: 10000/5000 MS (Java/Others) ...
- hdu3709 Balanced Number (数位dp+bfs)
Balanced Number Problem Description A balanced number is a non-negative integer that can be balanced ...
- HDU3709 Balanced Number (数位dp)
Balanced Number Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Descript ...
- [暑假集训--数位dp]hdu3709 Balanced Number
A balanced number is a non-negative integer that can be balanced if a pivot is placed at some digit. ...
- hdu3709 Balanced Number 树形dp
A balanced number is a non-negative integer that can be balanced if a pivot is placed at some digit. ...
- hdu3709 Balanced Number 数位DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 题目大意就是求给定区间内的平衡数的个数 要明白一点:对于一个给定的数,假设其位数为n,那么可以有 ...
- HDU3709 Balanced Number 题解 数位DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 题目大意: 求区间 \([x, y]\) 范围内"平衡数"的数量. 所谓平衡 ...
- HDU3709:Balanced Number(数位DP+记忆化DFS)
Problem Description A balanced number is a non-negative integer that can be balanced if a pivot is p ...
- HDU - 3709 - Balanced Number(数位DP)
链接: https://vjudge.net/problem/HDU-3709 题意: A balanced number is a non-negative integer that can be ...
随机推荐
- python和numpy的版本、安装位置
命令行下查看python和numpy的版本和安装位置 1.查看python版本 方法一: python -V 注意:‘-V‘中‘V’为大写字母,只有一个‘-’ 方法二: python --versio ...
- lunix的查看Tomcat目录下日志的快速操作
可以使用cd命令,cd命令的功能是切换到指定的目录: 命令格式:cd [目录名] 有几个符号作为目录名有特殊的含义: "/"代表根目录. ".."代表上一级目录 ...
- python学习笔记-(四)列表&元组
1.列表及元组操作 1.1 列表 Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 定义列表: >>> namelist = ...
- sudo 出现unable to resolve host 解决方法
inux 环境, 假设这台机器名字叫dev(机器的hostname), 每次执行sudo 就出现这个警告讯息:sudo: unable to resolve host dev虽然sudo 还是可以正常 ...
- CentOS7安装Nginx并部署
服务器IP是192.168.36.136 1.直接yum install nginx即可 2.主配置文件是/etc/nginx/下的nginx.conf,另外一个是/etc/nginx/conf.d/ ...
- CSS 中背景图片定位方法
三种: 关键字:background-position: top left; 像素:background-position: 0px 0px; 百分比:background-position: 0% ...
- Unable to find vcvarsall.bat的解决办法
明年绝对买MAC电脑,这一两天安装paramiko,真是操碎了心. 安装paramiko时报error: Unable to find vcvarsall.bat这种错误,网上找了各种方法啊,解决的办 ...
- swiper 增加同页面增加2个滚动
js代码 <script type="text/javascript"> var mySwiper = new Swiper('.slide_a',{ noSwipin ...
- Java WebService入门实例
Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务. Web Service的关键技术和规则: 1.XML:描述 ...
- 多线程 GET
iOS中多线程的实现 方案 简介 语言 线程生命周期 使用频率 pthread 一套通用的多线程API 适用于 Unix / Linux / Windows 等系统 跨平台\可移植 使用难度大 C 程 ...