【BZOJ-1833】count数字计数 数位DP
2016-04-29 21:30
417 查看
1833: [ZJOI2010]count 数字计数
Time Limit: 3 Sec Memory Limit: 64 MBSubmit:
2494 Solved: 1101
[Submit][Status][Discuss]
Description
给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。Input
输入文件中仅包含一行两个整数a、b,含义如上所述。Output
输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次。Sample Input
1 99Sample Output
9 20 20 20 20 20 20 20 2020
HINT
30%的数据中,a<=b<=10^6;100%的数据中,a<=b<=10^12。
Source
Day1Solution
裸的数位DP,但其实并不是特别的水首先F[i][j][k]表示位数为i的最高位为j的k种数的个数
按照十进制拆分,预处理后统计答案
Code
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; long long L,R; long long F[15][10][10],ans1[10],ans2[10]; void prework() { for (int i=0; i<=9; i++) F[1][i][i]=1; long long tmp=1; for (int i=2; i<=12; i++) { tmp*=10; F[i][0][0]=F[i-1][1][0]*9+F[i-1][0][0]+tmp; for (int j=1; j<=9; j++) F[i][0][j]=F[i-1][0][j]*9+F[i-1][j][j]; for (int j=1; j<=9; j++) { F[i][j][0]=F[i-1][1][0]*9+F[i-1][0][0]; for (int k=1; k<=9; k++) if (j==k) F[i][j][k]=F[i-1][0][k]*9+F[i-1][k][k]+tmp; else F[i][j][k]=F[i-1][0][k]*9+F[i-1][k][k]; } } } long long cf(int x) { long long re=1; for (int i=1; i<x; i++) re*=10; return re; } void Calc(long long x,long long *ans) { int digit[15]={0},len=0; long long y=x; while (x) {digit[++len]=x%10; x/=10;} for (int i=1; i<len; i++) for (int j=1; j<=9; j++) for (int k=0; k<=9; k++) ans[k]+=F[i][j][k]; for (int i=len; i>=1; i--) { for (int j=0; j<=digit[i]-1; j++) { if (i==len && j==0) continue; for (int k=0; k<=9; k++) ans[k]+=F[i][j][k]; } ans[digit[i]]+=y%cf(i)+1; } } int main() { prework(); scanf("%lld%lld",&L,&R); Calc(L-1,ans1); Calc(R,ans2); printf("%lld",ans2[0]-ans1[0]); for (int i=1; i<=9; i++) printf(" %lld",ans2[i]-ans1[i]); return 0; }
自己一开始YY的出错了..
相关文章推荐
- Atitit.预定义变量与变量预处理器
- 【LeetCode】Reverse String 解题报告
- 多线程基础小结
- 基础卷_异常篇 第3集 对多异常的处理
- POJ 3087 Shuffle'm Up
- HDOJ(HDU) 2083 简易版之最短距离(中位数)
- CentOS系统:no space left on device错误
- HDOJ(HDU) 2083 简易版之最短距离(中位数)
- .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制
- 【GOF】代理模式(proxy)之静态代理
- C++多态性
- Ionic使用ngCordova插件,以Geolocation地理定位为例
- 读取一个字符c++
- 四旋翼动力学和仿真翻译(Quadcopter Dynamics and Simulation)
- LeetCode|Ugly Number
- leetcode 345:Reverse Vowels of a String
- scala学习第三弹:scala实战
- 记一次DRBD Unknown故障处理过程 推荐
- hdu 2855 Fibonacci Check-up【递推+矩阵快速幂】
- 第二课 函数调用