POJ 3286 How many 0's?(数位dp)
来源:互联网 发布:货架重量计算软件 编辑:程序博客网 时间:2024/06/03 14:55
题目链接:POJ 3286 How many 0’s?
题意
输入n,m,求n~m范围内的所有数字中,0出现的总数是多少。
思路
用2034做个例子。
枚举0在个十百千位上出现的次数
个:个位为0时,后面不需要考虑,只需考虑前面,因为0比4小,所以前面即使取到最大也不会过限,所以前面可以是1~203(因为当前位是0,所以前面不能是0)。一共203种。
十:十位为0时,前面取1~20,后面取0~9。一共123*10种。
百:百位为0时,因为0与当前位上限0相等,所以前面取1时,后面可以取0~99,前面取2时,后面只能取0~34。一共1*100+35种。
千位显然不能为0,所以总数为0。
把上述思想转化为代码即可。
代码
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <cstdlib>#include <vector>#include <cmath>#include <map>using namespace std;const int N = 10009;#define LL long longLL p[20];void init(){ p[0] = 1; for(int i=1; i<18; i++) p[i] = p[i-1]*10;}LL solve(LL x){ if(x == -1) return -1; LL ans = 0; for(int i=1; ; i++) { LL l = x/p[i]; LL r = x%p[i-1]; LL now = x%p[i]/p[i-1]; if(now > 0) ans += l*p[i-1]; else ans += (l-1)*p[i-1] + r+1; if(p[i] > x) break; } return ans;}int main(){ LL n, m; init(); while(cin>>n>>m && (n!=-1 || m!=-1)) printf("%lld\n", solve(m) - solve(n-1)); return 0;}
0 0
- poj 3286 How many 0's? (数位DP+ 统计)
- poj 3286 How many 0's? --- 数位dp
- How many 0's? - POJ 3286 数位dp
- POJ 3286 How many 0's?(数位DP)
- POJ 3286 How many 0's? (数位dp)
- POJ 3286 How many 0's?(数位dp)
- POJ - 3286 - How many 0s? 【数位DP】
- poj 3286 How many 0's? 数位dp
- poj 2282 The Counting Problem && poj 3286 How many 0's? (数位dp)
- POJ3286:How many 0's?(数位DP)
- 数位dp poj3286 How many 0's?
- poj3286--How many 0's?(数位dp)
- poj3286 How many 0's? (数位DP)
- uva11038 How Many O's? 数位dp
- Poj 3286 How many 0's? + Bzoj 1833 count 数字计数(数位统计)
- poj 3286 How many 0's?
- POJ 3286How many 0's?
- poj 3286 How many 0's?
- Mac OSX 10.11.1+ 安装 Cocoapods
- Day8:IDEA 开发spark
- Java程序的工作方式
- 利用动态规划将逻辑函数化简到最简形式
- ruby warrior intermediate个人攻略(可能会更新
- POJ 3286 How many 0's?(数位dp)
- js作用域
- [LeetCode] Same Tree
- 第一行代码-10.3 解析XML数据格式
- html设置按钮背景颜色与背景图片一样,即设置按钮背景透明
- bzoj3524【POI2014】Couriers
- 数据与数据结构
- Linux服务器配置-jdk
- Web前端工程师成长之路——知识汇总