HDU - 4722 Good Numbers 【找规律 or 数位dp模板】

时间:2022-09-23 22:50:18
If we sum up every digit of a number and the result can be exactly divided by 10, we say this number is a good number.
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模板】的更多相关文章

  1. hdu 4722 Good Numbers(规律题)

    http://acm.hdu.edu.cn/showproblem.php?pid=4722 [题意]: 找GoodNumbers一个数N,如果它每一个位数字之和可以整除10,那么它就是GoodNum ...

  2. 【数位DP】 HDU 4722 Good Numbers

    原题直通车: HDU  4722  Good Numbers 题意: 求区间[a,b]中各位数和mod 10==0的个数. 代码: #include<iostream> #include& ...

  3. BZOJ&lowbar;1662&lowbar;&lbrack;Usaco2006 Nov&rsqb;Round Numbers 圆环数&lowbar;数位DP

    BZOJ_1662_[Usaco2006 Nov]Round Numbers 圆环数_数位DP Description 正如你所知,奶牛们没有手指以至于不能玩“石头剪刀布”来任意地决定例如谁先挤奶的顺 ...

  4. HDU 2089 不要62(数位dp模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内不包含4和连续62的数的个数. 思路: 简单的数位dp模板题.给大家推荐一个好的讲解博客.h ...

  5. POJ 3286 How many 0&&num;39&semi;s(数位DP模板)

    题目链接:http://poj.org/problem?id=3286 题目大意: 输入n,m,求[n,m]的所有数字中,0出现的总数是多少,前导零不算. 解题思路: 模板题,设dp[pos][num ...

  6. hdu 4722 Good Numbers&lpar; 数位dp入门&rpar;

    Good Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  7. hdu 4722 Good Numbers 数位DP

    数位DP!!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include&lt ...

  8. HDU 4722&colon;Good Numbers(数位DP)

    类型:数位DP 题意:定义一个Good Number 为 一个数所有位数相加的和%10==0.问[A,B]之间有多少Good Number. 方法: 正常“暴力”的定义状态:(i,d,相关量) 定义d ...

  9. HDU 4722 Good Numbers

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 Good Numbers Time Limit: 2000/1000 MS (Java/Othe ...

随机推荐

  1. GeoIP Legacy City数据库安装说明

    Here is a brief outline of the steps needed to install GeoIP Legacy City on Linux/Unix. The installa ...

  2. MySql增加字段、删除字段、修改字段名称、修改字段类型

    1.增加一个字段 alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一个字段,默认为空 alter table user a ...

  3. 退出recoveyr模式的iOS设备

    大致分析了一下几款工具,大概流程是: 使用AMDRestoreRegisterForDeviceNotifications来监听设备的连接. 监听设备连接的回调函数中获取设备的句柄. 调用AMReco ...

  4. Maven生命周期详解

    来源:http://juvenshun.iteye.com/blog/213959 Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解 ...

  5. Bootstrap学习笔记1

    Bootstrap在线手册 http://v3.bootcss.com,这里有详细的说明.参考.示例. Bootstrap为许多前端常用的功能都做了封装.预定义,可以直接使用. Bootstrap支持 ...

  6. 有关WAMPSERVER 环境搭建 如何修改端口,MySQL数据库的修改

    环境搭建 http://share.weiyun.com/88896747fedd4e8b19afebea18f7684c 一.修改Apache的监听端口 1.在界面中选Apache,弹出隐藏菜单选项 ...

  7. html中怎么去掉input获取焦点时候的边框

    如图   这个是在360浏览器极速模式下的效果 有个颜色的边框,,但是在兼容模式下就可以的呢 看看兼容模式下的效果 很显然 上面那个被高亮了,焦点的时候有边框 要怎么弄才能让他始终没有边框呢 2014 ...

  8. doctype(文档类型)的作用是什么&quest;转载

    <!DOCTYPE> 声明位于文档中的最前面的位置,处于 <html> 标签之前.此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范. Document Type ...

  9. struts2框架之文件上传(参考第三天学习笔记)

    上传 1. 上传对表单的要求 * method=post * enctype=multipart/form-data 2. 上传对servlet要求 * getParameter()不能再使用! -- ...

  10. HDU 1175 连连看 &lpar;DFS&plus;剪枝&rpar;

    <题目链接> 题目大意:在一个棋盘上给定一个起点和终点,判断这两点是否能通过连线连起来,规定这个连线不能穿过其它的棋子,并且连线转弯不能超过2次. 解题分析:就是DFS从起点开始搜索,只不 ...