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 ...
随机推荐
- 使用gui_upload的总结
今天使用gui_upload函数将文本文件的内容读取到内表.出现了一个问题,总是程序宕掉,出项的提示是 Type conflict when calling a function module. 原来 ...
- spring boot项目问题汇总
spring遇到的问题汇总 有关日志的打印和日志如何使用 在实际项目中,我们的程序都是运行在linux上,有错误时也不能在本地的控制台上直观看到,所有合理打印日志对于程序员迅速定位到错误. 打印日志时 ...
- const关键字:终于拥有真正的常量声明语句
本文首发于个人网站:const关键字:终于拥有真正的常量声明语句 你好,今天大叔想和你唠扯唠扯 ES6 新增的关键字 -- const.在说 const 关键字之前,大叔先和你唠唠大叔自己对 cons ...
- 亲测可用!免费下载QQ音乐大部分资源!
优化后亲测可用!免费下载QQ音乐大部分资源 通知 时间问题 博客园这边暂时停更要下载的去GitHub或者90盘 GitHub项目地址 https://github.com/TotoWang-hhh/m ...
- /bin/sh: cc: command not found
make的时候报错:/bin/sh: cc: command not found 解决: 1. sudo yum -y install gcc gcc-c++ libstdc++-devel 2. m ...
- 浅析Redis与IO多路复用器原理
为什么Redis使用多路复用I/O Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导 ...
- Vue整合swiper报错Could not compile template .....swiper\dist\css\swiper.css解决办法
问题描述 今天做一个前端项目,安装幻灯片插件vue-awesome-swiper后 运行npm run dev 后报错如下: `ERROR Could not compile template E:\ ...
- ETL调优的一些分享(上)(转载)
ETL是构建数据仓库的重要一环.通过该过程用户将所需数据提取出来,并按照已定义的模型导入数据仓库.由于ETL是建立数据仓库的必经过程,它的效率将影响整个数据仓库的构建,因此它的有效调优具有很高的重要性 ...
- I/O 复用 multiplexing data race 同步 coroutine 协程
小结: 1.A file descriptor is considered ready if it is possible to perform the corresponding I/O opera ...
- 支付回调地址 同步回调地址 异步回调地址 return_url和notify_url的区别
[微信支付]JSAPI支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_16&index=10 退款结果通知 ...