hdoj 2089 不要62 【数位dp】
来源:互联网 发布:软件外包服务专业 编辑:程序博客网 时间:2024/06/05 17:13
不要62
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 29141 Accepted Submission(s): 10228
Problem Description
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有4或62的号码。例如:
62315 73418 88914
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有4或62的号码。例如:
62315 73418 88914
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。
Input
输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。
Output
对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。
Sample Input
1 1000 0
Sample Output
80
Author
qianneng
数位dp入门:
dp[i][0]: i位数中不含不吉利数字的个数。
dp[i][1]: i位数中不含不吉利数字 最高位是2的个数。
dp[i][2]: i位数中含不吉利数字的个数。
AC代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <set>#include <vector>#include <string>#define INF 1000000#define eps 1e-8#define MAXN (200000+10)#define MAXM (100000+10)#define Ri(a) scanf("%d", &a)#define Rl(a) scanf("%lld", &a)#define Rf(a) scanf("%lf", &a)#define Rs(a) scanf("%s", a)#define Pi(a) printf("%d\n", (a))#define Pf(a) printf("%.2lf\n", (a))#define Pl(a) printf("%lld\n", (a))#define Ps(a) printf("%s\n", (a))#define W(a) while((a)--)#define CLR(a, b) memset(a, (b), sizeof(a))#define MOD 1000000007#define LL long long#define lson o<<1, l, mid#define rson o<<1|1, mid+1, r#define ll o<<1#define rr o<<1|1#define PI acos(-1.0)#pragma comment(linker, "/STACK:102400000,102400000")#define fi first#define se secondusing namespace std;typedef pair<int, int> pii;int dp[8][3];void Init(){ dp[0][0] = 1; for(int i = 1; i <= 6; i++) { dp[i][0] = dp[i-1][0] * 9 - dp[i-1][1]; dp[i][1] = dp[i-1][0]; dp[i][2] = dp[i-1][2] * 10 + dp[i-1][0] + dp[i-1][1]; }}int bit[8];int Count(int n){ int len = 0; int ans = 0, total = n; while(n) { bit[++len] = n % 10; n /= 10; } bit[++len] = 0; bool flag = false; for(int i = len-1; i >= 1; i--) { ans += dp[i-1][2] * bit[i];//第i为填0 - bit[i]-1 if(flag) {ans += dp[i-1][0] * bit[i]; continue;}//高位已经不合法 if(bit[i] > 4) ans += dp[i-1][0];//该位可以填4 if(bit[i+1] == 6 && bit[i] > 2) ans += dp[i][1];//填62 if(bit[i] > 6) ans += dp[i-1][1];//填62 if(bit[i] == 4 || (bit[i+1] == 6 && bit[i] == 2)) flag = true;//高位不合法 } if(flag) ans++;//自己 return total - ans;}int main(){ Init(); int n, m; while(scanf("%d%d", &n, &m), n||m){ Pi(Count(m) - Count(n-1)); } return 0;}
0 0
- HDOJ 2089 不要62 (数位DP)
- HDOJ题目2089 不要62(数位DP)
- HDOJ 2089 不要62 数位DP
- hdoj 2089 不要62 【数位dp】
- HDOJ 题目2089 不要62(数位DP,重刷)
- HDOJ 2089 不要62(数位dp/打表)
- hdoj 2089 不要62(数位dp入门模板)
- HDOJ 2089 不要62(数位DP入门)
- 数位DP--不要62
- 数位dp不要62
- 【数位dp】不要62
- hdu 2089 不要62 数位DP
- hdu 2089 不要62 数位dp
- hdu 2089 不要62 数位dp
- hdu 2089 不要62(数位dp入门)
- [HDU 2089]不要62[数位DP]
- hdu 2089 不要62(数位dp)
- Hdu 2089 不要62 (暴力/数位dp)
- 由浅入深探究 MySQL索引结构原理、性能分析与优化
- PHP程序员开发工具
- RBM学习算法
- [Leetcode] 331
- HTML5开发移动web应用——SAP UI5篇(1)
- hdoj 2089 不要62 【数位dp】
- C++链队列类实现
- hdu4352 XHXJ's LIS
- TokuDB · 行锁(row-lock)与区间锁(range-lock)
- 广西首届网络安全选拔赛PWN、REVERSE、决赛题目
- hdu 2025 查找最大元素
- 连接断开导致XA事务丢失
- Codeforces Round #341 (Div. 2) ---补题
- Meteor应用架构 — Mantra概述