zoukankan      html  css  js  c++  java
  • [ZJOI2010]数字计数

    题目描述

    给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。

    输入输出格式

    输入格式:

    输入文件中仅包含一行两个整数a、b,含义如上所述。

    输出格式:

    输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次。

    输入输出样例

    输入样例#1:
    1 99
    
    输出样例#1:
    9 20 20 20 20 20 20 20 20 20
    

    说明

    30%的数据中,a<=b<=10^6;

    100%的数据中,a<=b<=10^12。

    思路

    这个题一看就是数位DP嘛;

    所以,就乱搞一下就行了;

    特别的,注意0的出现次数;

    代码实现

     1 #include<cstdio>
     2 #define ll long long
     3 ll l,r;
     4 ll s[10];
     5 ll get(ll a,ll b){
     6        ll ret=0,i=1,j=b;
     7        for(ll i=1,j=b;j;j/=10,i*=10){
     8            ret+=(j/10+(j%10>a))*i;
     9            if(!a) ret-=i;
    10            if(j%10==a) ret+=b%i+1;
    11        }
    12        return ret;
    13 }
    14 int main(){
    15        scanf("%lld%lld",&l,&r);
    16        for(int i=0;i<10;i++){
    17            s[i]+=get(i,r)-get(i,l-1);
    18            if(!i&&l==1) s[i]--;
    19            printf("%lld ",s[i]);
    20        }
    21        putchar('
    ');
    22        return 0;
    23 }
  • 相关阅读:
    hdu2328 Corporate Identity
    hdu1238 Substrings
    hdu4300 Clairewd’s message
    hdu3336 Count the string
    hdu2597 Simpsons’ Hidden Talents
    poj3080 Blue Jeans
    poj2752 Seek the Name, Seek the Fame
    poj2406 Power Strings
    hust1010 The Minimum Length
    hdu1358 Period
  • 原文地址:https://www.cnblogs.com/J-william/p/7411927.html
Copyright © 2011-2022 走看看