zoukankan      html  css  js  c++  java
  • 51nod 1042 数字0-9的数量 数位DP

    51nod 1042 数字0-9的数量 传送门

    偷来的代码。。记板子记板子……感觉大佬的代码一直都好清晰简洁,学习学习 http://blog.csdn.net/f_zyj/article/details/52082449

    #include<iostream>
    #include<string.h>
    using namespace std;
    typedef long long ll;
    ll l,r,dp[20];
    ll qpow(ll x,ll n)  //emmmm快速幂
    {
        ll res=1;
        while(n)
        {
            if(n&1) res*=x;
            x*=x;
            n>>=1;
        }
        return res;
    }
    void init() //初始化
    {
        memset(dp,0,sizeof(dp));
        for(int i=1;i<20;i++)
         dp[i]=dp[i-1]*10+qpow(10,i-1);
    }
    ll DP(ll x,ll i)
    {
        ll res=0,len=0,digit=0,radix=1,tail=0,nx=x;
        while(x)
        {
            digit=x%10;
            x/=10;
            ++len;
            if(digit>i)
             res+=radix+digit*dp[len-1];
            else if(digit==i)
             res+=tail+1+digit*dp[len-1];
            else if(digit<i)
             res+=digit*dp[len-1];
            tail+=digit*radix;
            radix*=10;
        }
        if(i==0)  //处理前缀为0的情况
        {
            ll m=1;
            while(nx)
            {
                nx/=10;
                res-=m;
                m*=10;
            }
        }
        return res;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        init();
        cin>>l>>r;
        for(int i=0;i<10;i++)
         cout<<DP(r,i)-DP(l-1,i)<<endl;
         return 0;
     } 
  • 相关阅读:
    方法
    顺序结构 基本语句
    包,Doc
    运算符
    变量
    类型转换
    day7——JAVA数组
    day6——java方法
    day5——java流程控制
    day4
  • 原文地址:https://www.cnblogs.com/Egoist-/p/7652674.html
Copyright © 2011-2022 走看看