zoukankan      html  css  js  c++  java
  • 处女座和小姐姐(三)-(数位dp)

    链接:https://ac.nowcoder.com/acm/contest/329/G
    来源:牛客网

    题目描述

    经过了选号和漫长的等待,处女座终于拿到了给小姐姐定制的手环,小姐姐看到以后直呼666!

    处女座其实也挺喜欢6这个数字的,实际上他做手环的时候选取的k=6。所以他对于包含数码6的数字极其敏感。每次看到像4567这样的数字的时候他的心就像触电了一样,想起了小姐姐。

    现在你要给处女座展示一系列数字,你想知道他的内心会激动多少次。对于同一个数字,他最多只会激动一次,即如果这个数是66666,他还是只会激动一次。

    输入描述:

    一行包括两个数字l,r,表示你给处女座展示的数字范围为[l,r]。

    输出描述:

    一行一个整数,表示处女座内心激动的次数。
    示例1

    输入

    10 20

    输出

    1

    备注:

    0lr1018
    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<math.h>
    #include<vector>
    #include<queue>
    #include<map>
    #define ll long long
    #define inf 0x3f3f3f3f
    using namespace std;
    ll dp[20][10];///dp[i][j]表示i+1位数,且以j为开头,不包含6的数的个数
    void init()
    {
        memset(dp,0,sizeof(dp));
        dp[0][0]=1;
        for(int i=1;i<20;i++)///i表示从右往左开始第几位,j表示第i位上的数字
        {
            for(int j=0;j<10;j++)
            {
                for(int k=0;k<10;k++)
                    if(j!=6)///不累计第i位上数字为6的个数
                    dp[i][j] += dp[i-1][k];
            }
        }
    }
    ll solve(ll x)//求 1到(x-1)里 不包含6的数 的个数
    {
        ll temp=x;
        int num[20];
        int cnt=1;
        while(x)//记录各个位置上的数字
        {
            num[cnt++]=x%10;
            x=x/10;
        }
        num[cnt]=0;
        ll res=0;
        for(int i=cnt-1;i>0;i--)///有多少位
        {
            for(int j=0;j<num[i];j++)//如果该位上数字为0的话,是不满足累加要求的
            {
               // if(j!=6) //这一步可以不要的,因为dp[i][6]=0
                res+=dp[i][j];
            }
            if(num[i]==6)///比如3650,遇到6,后面直接不用算了
                break;
        }
        return temp-res;//返回不包含6的数字的个数
    }
    
    int main()
    {
        init();
        ll l,r;
        while( scanf("%lld%lld",&l,&r)!=EOF )
        {
            ll ans;
            ans=solve(r+1)-solve(l);
            printf("%lld
    ",ans);
        }
        return 0;
    }
    
    
    
     
  • 相关阅读:
    python编程设计模式之接口类和抽象类
    python进阶之面向对象初识
    python进阶之异常处理
    python模块之包
    python模块之序列化模块
    python基础二 ---类型转换 ,字符串,列表,元祖,for,range,enumerate
    python基础一
    TCP协议的三次握手
    随机数Math.random()
    Vue.js内部响应式原理探究
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/10327839.html
Copyright © 2011-2022 走看看