51Nod 数字0到9的数量 (数位DP)
来源:互联网 发布:冒险岛2mac能玩吗 编辑:程序博客网 时间:2024/05/17 01:42
跟1009题类似:
http://blog.csdn.net/since_natural_ran/article/details/72668443
但是还是这道题考察能力强。
对于数字的考察有时候要多多注意规律,比如之前求1的数量的时候只是考虑了1,而其它的数字有时候和1有不同的情况,比如0.
按照其它的数字算的话总是0能多算一个dp[len-1]所以要减去。
#include <iostream>#include <cstdio>#include <math.h>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;LL n,m;LL dp[20];void init(){ memset(dp,0,sizeof(dp)); for(int i = 1;i < 20; i++) { dp[i] = dp[i-1]*10 + pow(10,i-1); }}LL solve(LL x,int nu){ LL temp = x; LL ans = 0; LL tail = 0; LL tenn = 1; int digit = 0; int len = 0; while(x) { digit = x%10; x /= 10; len++; if(digit > nu) { ans += tenn + digit*dp[len-1]; } else if(digit == nu) { ans += tail + 1 + digit*dp[len-1]; } else { ans += digit*dp[len-1]; } tail = tail + digit*tenn; tenn *= 10; } if(nu == 0) { LL t = 1; while(temp) { ans -= t; t *= 10; temp /= 10; } } return ans;}int main(){ //freopen("in.txt","r",stdin); init(); scanf("%I64d%I64d",&n,&m); for(int i = 0;i <= 9; i++) { printf("%I64d\n",solve(m,i)-solve(n-1,i)); } return 0;}
阅读全文
0 0
- 51Nod 数字0到9的数量 (数位DP)
- 51nod 1042 数字0-9的数量 数位DP
- 51nod数字0-9的数量(数位dp)
- 51NOD 1042 数字0-9的数量 数位DP
- 51nod 1042 数字0-9的数量(数位dp)
- 51nod 1042 数字0-9的数量【数位dp】
- 51Nod 1042 数字0-9的数量 (数位DP
- 51nod 1042 数字0-9的数量 数位DP
- 数位dp 总结 51nod数字1的数量 数字0-9的数量
- 【51Nod】1042 - 数字0-9的数量(数位dp & 递归)
- 51nod 1042 数字0-9的数量(数位DP)
- 51nod 1042 数字0-9的数量(数位dp)
- 51Nod 1009 数字1的数量(数位dp)
- 51nod 1009 数字1的数量(数位dp)
- 51nod 数字1的数量(数位DP)
- 51nod 1009 数字1的数量(数位dp)
- 51nod 1009 数字1的数量(数位dp)
- 51nod 1009 数字1的数量【数位dp】
- java学习【JDBC入门】
- Linux
- Integer Break
- 读书笔记--SQL必知必会--建立练习环境
- 51nod 1070 Bash游戏 V4
- 51Nod 数字0到9的数量 (数位DP)
- 读书笔记--SQL必知必会01--了解SQL
- c#基于socket编程实现简单多人聊天程序
- 读书笔记--SQL必知必会02--检索数据
- 读书笔记--SQL必知必会03--排序检索数据
- Docker
- 专业课程设计之客户与服务器程序的同步与通信机制的设计(四)信号量
- logistic回归算法原理及python实现
- 读书笔记--SQL必知必会04--过滤数据