【BZOJ 1833】 [ZJOI2010]count 数字计数|数位DP

来源:互联网 发布:钢铁力量天蝎数据 编辑:程序博客网 时间:2024/05/17 13:14

一位一位的来计算

然后0会计算多次 然后减掉

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define LL long longconst int MAXN=20;LL a[MAXN],b[MAXN],s[MAXN],mi[MAXN];void f(LL x,LL a[]){  int top=0;LL tmp=x;  while(tmp!=0) s[++top]=tmp%10,tmp/=10;  for(int i=top;i>=1;i--)  {    for(int j=0;j<=9;j++) a[j]+=mi[i-1]*(i-1)*s[i];    for(int j=0;j<=s[i]-1;j++) a[j]+=mi[i];    a[s[i]]+=x%mi[i]+1;  }   for(int i=1;i<=top;i++) a[0]-=mi[i];}int main(){  mi[1]=1;  for(int i=2;i<=19;i++) mi[i]=mi[i-1]*10;  LL s,t;  scanf("%lld %lld",&s,&t);  f(t,a);  f(s-1,b);  printf("%lld",a[0]-b[0]);  for(int i=1;i<=9;i++) printf(" %lld",a[i]-b[i]);  return 0;}



0 0
原创粉丝点击