UVa 11038 How Many 0's?(数学计数)
2015-02-08 13:03
316 查看
问题转化为求0到x的所有数中0的数量,相当于前缀和。
求前缀和的方法:依次求每一位上是0的情况数,这是要分这一位上原数是不是零这两种情况讨论的。
求的过程中需要知道当前处理这一位的左边,右边数各是多少。一个方便的方法是只用3个数left,right,cur维护,从右往左递推修改这3个数。
代码:
求前缀和的方法:依次求每一位上是0的情况数,这是要分这一位上原数是不是零这两种情况讨论的。
求的过程中需要知道当前处理这一位的左边,右边数各是多少。一个方便的方法是只用3个数left,right,cur维护,从右往左递推修改这3个数。
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define LL long long LL solve(LL n){ if(n<0) return 0; LL cur=n%10; LL right=0; LL left=n/10; LL res=0; LL k=1; while(left>0){ if(cur!=0){ res+=k*left; } else { res+=k*(left-1); res+=(right+1); } right+=cur*k; k*=10; cur=left%10; left/=10; } return res+1; } int main(){ LL m,n; while(~scanf("%lld%lld",&m,&n)){ if(m<0) break; printf("%lld\n",solve(n)-solve(m-1)); } return 0; }
相关文章推荐
- POJ 3286- How many 0's?(组合数学_区间计数)
- UVA 10601 Cubes (组合数学 + ploya计数)
- UVa 11038 - How Many O's? (组合数学 数位统计)
- Poj 3286 How many 0's? + Bzoj 1833 count 数字计数(数位统计)
- UVa 1640 The Counting Problem (数学,区间计数)
- uva 11038 How Many O's? 组合计数
- UVA 11038 - How Many O's? (数学题)
- 数学,计数(数三角形,uva 11401)
- uva 11038 - How Many O's?(计数问题)
- 数学专项counting:UVa 11038
- uva11038 组合计数
- Uva 11038 - How Many O's? 解题报告(计数)
- UVA 11038 - How Many O's?(计数问题)
- UVA - 11038 How Many O's? (计数)
- UVA 621 - Secret Research(数学)
- UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)
- uva 1555(数学)
- 找规律,数学(巨大的斐波那契数列,uva 11582)
- BZOJ_4517_[Sdoi2016]排列计数_组合数学
- uva 10766 Organising the Organisation 生成树计数