HDU - 4722 Good Numbers 【找规律 or 数位dp模板】
You are required to count the number of good numbers in the range from A to B, inclusive.
InputThe first line has a number T (T <= 10000) , indicating the number of test cases.
Each test case comes with a single line with two numbers A and B (0 <= A <= B <= 10
18).OutputFor test case X, output "Case #X: " first, then output the number of good numbers in a single line.Sample Input
2
1 10
1 20
Sample Output
Case #1: 0
Case #2: 1
Hint
The answer maybe very large, we recommend you to use long long instead of int. 这题有两种做法,找规律或者数位dp
法一找规律:从0开始打表会发现每10个数都有一个good number 0 - 9, 10- 19 …… 这样假如要求0 到123,只需要求 0 - 119的 有12个good numbers,再暴力求120 - 123的即可。
法二数位dp:这道题在数位dp中算是模板入门了吧。
法一代码:
1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #include <iostream>
5 #include <cmath>
6 #include <vector>
7 #include <map>
8 #include <queue>
9 #include <set>
10 #include <cstring>
11 using namespace std;
12 typedef long long ll;
13 #define inf 0x3f3f3f3f
14 char st[12];
15 ll x;
16 int main()
17 {
18 int t;
19 ll a, b;
20 scanf("%d", &t);
21 ll cnta = 0, cntb = 0;
22 for(int cas = 1; cas <= t; ++cas) {
23 cnta = 0;
24 cntb = 0;
25 scanf("%lld %lld", &a, &b);
26 a--;
27 if(a < 0) cnta--;
28 a = max(a, ll(0));
29 ll ma = a % 10;
30 cnta += a / 10;
31 for(ll i = 0; i <= ma; ++i) {
32 ll sum = 0;
33 ll v = a / 10 * 10+ i;
34 while(v) {
35 sum += v % 10;
36 v /= 10;
37 }
38 if(sum % 10 == 0) cnta++;
39 }
40 ll mb = b % 10;
41 cntb += b / 10;
42 for(ll i = 0; i <= mb; ++i) {
43 ll sum = 0;
44 ll v = b / 10 * 10+ i;
45 while(v) {
46 sum += v % 10;
47 v /= 10;
48 }
49 if(sum % 10 == 0) cntb++;
50 }
51
52 printf("Case #%d: %lld\n", cas, cntb - cnta);
53 }
54 return 0;
55 }
法二代码:
1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #include <iostream>
5 #include <cmath>
6 #include <vector>
7 #include <map>
8 #include <queue>
9 #include <set>
10 #include <cstring>
11 using namespace std;
12 typedef long long ll;
13 #define inf 0x3f3f3f3f
14 ll dp[22][188];
15 ll ed[22];
16 ll dfs(int pos, ll sum, bool lmt) {
17 if(pos == 0) {
18 if(sum % 10 == 0) return 1;
19 return 0;
20 }
21
22 if(!lmt && dp[pos][sum] != -1) return dp[pos][sum];
23 ll ans = 0;
24 ll up = lmt? ed[pos] : 9;
25 for(ll i = 0; i <= up; ++i) {
26 ans += dfs(pos - 1, sum + i, lmt && i == ed[pos]);
27 }
28 if(!lmt) dp[pos][sum] = ans;//统计状态
29 return ans;
30 }
31 ll solv(ll x) {
32 if(x < 0) return 0;
33 int len = 0;
34 while(x) {
35 ed[++len] = x % 10;
36 x /= 10;
37 }
38
39 return dfs(len, 0, 1);
40 }
41
42 int main()
43 {
44 int t;
45 ll a, b;
46 scanf("%d", &t);
47 memset(dp,-1,sizeof(dp));
48 for(int cas = 1; cas <= t; ++cas) {
49
50 scanf("%lld %lld", &a, &b);
51 printf("Case #%d: %lld\n", cas, solv(b) - solv(a - 1));
52 }
53 return 0;
54 }
HDU - 4722 Good Numbers 【找规律 or 数位dp模板】的更多相关文章
- hdu 4722 Good Numbers(规律题)
http://acm.hdu.edu.cn/showproblem.php?pid=4722 [题意]: 找GoodNumbers一个数N,如果它每一个位数字之和可以整除10,那么它就是GoodNum ...
- 【数位DP】 HDU 4722 Good Numbers
原题直通车: HDU 4722 Good Numbers 题意: 求区间[a,b]中各位数和mod 10==0的个数. 代码: #include<iostream> #include& ...
- BZOJ_1662_[Usaco2006 Nov]Round Numbers 圆环数_数位DP
BZOJ_1662_[Usaco2006 Nov]Round Numbers 圆环数_数位DP Description 正如你所知,奶牛们没有手指以至于不能玩“石头剪刀布”来任意地决定例如谁先挤奶的顺 ...
- HDU 2089 不要62(数位dp模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内不包含4和连续62的数的个数. 思路: 简单的数位dp模板题.给大家推荐一个好的讲解博客.h ...
- POJ 3286 How many 0's(数位DP模板)
题目链接:http://poj.org/problem?id=3286 题目大意: 输入n,m,求[n,m]的所有数字中,0出现的总数是多少,前导零不算. 解题思路: 模板题,设dp[pos][num ...
- hdu 4722 Good Numbers( 数位dp入门)
Good Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- hdu 4722 Good Numbers 数位DP
数位DP!!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include< ...
- HDU 4722:Good Numbers(数位DP)
类型:数位DP 题意:定义一个Good Number 为 一个数所有位数相加的和%10==0.问[A,B]之间有多少Good Number. 方法: 正常“暴力”的定义状态:(i,d,相关量) 定义d ...
- HDU 4722 Good Numbers
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 Good Numbers Time Limit: 2000/1000 MS (Java/Othe ...
随机推荐
- 如何在K8s,Docker-Compose注入镜像Tag
最近在做基于容器的CI/CD, 一个朴素的自动部署的思路是: 从Git Repo打出git tag,作为镜像Tag ssh远程登录到部署机器 向部署环境注入镜像Tag,拉取镜像,重新部署 下面分享我是 ...
- vs code配置vue自动格式化
vs code配置vue自动格式化 我他妈的要被这个vs code的格式化逼疯了.我在网上看了很多的文章,不是太老就是不好使,遇到太多坑了.在这贴出自己的配置,虽然有多余的代码,虽然可能在未来的更新 ...
- 推荐几个学习Python的免费网站
想要学好Python,只靠看Python相关的书籍是远远不够的!今天为大家分享几个实用的Python学习网站. 欢迎各位热爱Python的小伙伴进群交流:610380249群里有大佬哦,而且很热心,群 ...
- linux登陆欢迎信息及命令提示符修改
登录信息修改 登陆信息显示数据 : /etc/issue and /etc/motd 登陆终端机的时候,会有几行提示的字符串,这些设置在/etc/issue里面可以修改,提示内容在/etc/motd中 ...
- 同步与异步 Python 有何不同?
你是否听到人们说过,异步 Python 代码比"普通(或同步)Python 代码更快?果真是那样吗? 1 "同步"和"异步"是什么意思? Web 应用 ...
- jasper使用table组件设计复杂的表头
1.1 设计报表模板 1.1.1 新建模板DemoReport5.jrxml,去掉不需要的Band,保留Title,Page Header,Detail 1 , PageFooter.将组件Table ...
- poj 2112 最优挤奶方案
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 16550 Accepted: 5945 ...
- MongoTemplate聚合(一)$lookup
mongodb 最近入职了新的公司,新公司统一使用的mongodb,es等非关系型数据库.以前对es有一些了解,其实就是灵活的文档类型结构,不受限于关系型数据库的那种字段唯一确定的"死板 ...
- python 基础学习4 字典和循环语句
学了这么多天的基础,好着急的想什么时候可以开始写个小程序,今天还是静下心来把字典和循环语句学习了 关于字典,主要是了解了字典的创建,和映射,以及一些基本的运算法,运算法不一一列出,运算法在用到的时候会 ...
- Java——序列化与反序列化
序列化 序列化 序列化是什么 如何实现对象序列化 实战练习 Serializable 反序列化 总结 使用Reader读取文件内容1 使用Reader读取文件内容2 序列化是什么? 将对象的状态存储到 ...