在给定范围的数据中找到含有6的数据个数

简介: 在给定范围的数据中找到含有6的数据个数

题目:处女座对于包含数码6的数字极其敏感。每次看到像4567这样的数字的时候他的心就像触电了一样,想起了小姐姐。现在你要给处女座展示一系列数字,你想知道他的内心会激动多少次。对于同一个数字,他最多只会激动一次,即如果这个数是66666,他还是只会激动一次。

28.png


#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 2e5 + 5; //限定N变量为只读
LL a[20];
LL dp[20];
LL dfs(LL len,bool limit) {
    if(len == 0) return 1LL;  //longlong类型的1. 某个数*1LL是为了从int类型转成longlong类型
    if(!limit && dp[len]) return dp[len];    
    LL m = (limit) ? a[len] : 9;    //如果limit是真(是1或True),m=a【len】; 如果limit是假(是0或false),m=9
    LL cnt = 0;
    for(LL i=0;i<=m;i++) {
        if(i == 6) continue;
        cnt += dfs(len-1,limit && (i == m));
    }
    return dp[len] = cnt;
}
LL six(LL n) {
    memset(dp,0,sizeof(dp));
    LL k = 0;
    while(n) {
        a[++k] = n % 10;
        n /= 10;
    }
    return dfs(k,1);
}
int main() {
    LL l,r;
    scanf("%lld %lld",&l,&r);
    LL ans = (r - l + 1) - (six(r) - six(l-1));
    printf("%lld\n",ans);
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 25;
ll dp[N][10];
ll n,m;
void init(){
    for(int i = 1;i<=20;i++){
        for(int j=0;j<=9;j++){
            if(j!=6){
                for(int k=0;k<=9;k++)
                    dp[i][j]+=dp[i-1][k];
            }
            else{
                ll tmp = 1;
                for(int q=1;q<=i-1;q++)
                    tmp*=10;
                dp[i][j]=tmp;
            }
        }
    }
}
int v[N];
ll solve(ll di){
    ll res=0;
    v[0]=0;
    while(di){ // 将数字存入v数组,并且用v[0]记录位数
        v[++v[0]]=di%10;
        di/=10;
    }
    for(int i=v[0];i>=1;i--){ // 逐位排查
        for(int j=0;j<v[i];j++){ // 对此位的各种取值可能进行判断
            res+=dp[i][j];// 这里面加的dp,如果是含6就会加上所有含有6的那几千万种可能,可能是1000,1000000等
        }
// 也就是这个大佬的解题思路是   1.  加上各位是6的dp可能
                            //  2.  加上一个位置是6后的各种位置的花式取值
        if(v[i]==6){ // 本位的60000……的10000……种可能已经在前面加过了
            ll tmp = 0;
            for(int k=i-1;k>=1;k--){// 500 对应后面有 500种可能,就是先5 再 *10  再*10
                tmp=tmp*10+v[k];
            }
            res+=tmp;
            break;
        }
    }
    return res;
}
int main(){
    init();
    scanf("%lld%lld",&n,&m);
    ll res1 = solve(m+1);
    ll res2 = solve(n);
    printf("%lld\n",res1-res2);
}

不明白……

相关文章
|
12月前
|
人工智能 安全 Serverless
云应用开发平台CAP 测评
云应用开发平台CAP 测评
206 2
|
11月前
|
数据采集 监控 数据挖掘
拼多多商品评价API的获取与应用
在数字化商业时代,拼多多商品评价API为开发者和企业提供深入理解消费者反馈、优化产品策略及提升用户体验的重要途径。本文详述了该API的获取方法及其在电商平台运营优化、品牌商市场调研与产品改进、数据分析与市场洞察等领域的广泛应用,强调了遵守使用规范、数据质量处理及性能优化的重要性。
757 0
|
机器学习/深度学习 人工智能 自然语言处理
让非算法同学也能了解 ChatGPT 等相关大模型
让非算法同学也能了解 ChatGPT 等相关大模型
199 3
让非算法同学也能了解 ChatGPT 等相关大模型
|
Linux 网络架构
linux route 命令
linux route 命令
148 0
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
|
机器人 数据安全/隐私保护 Python
Cobalt Strike的多种上线提醒方法(上)
Cobalt Strike的多种上线提醒方法
721 0
|
安全 Ubuntu 网络协议
【永久开源】vulntarget-c 打靶记录(上)
【永久开源】vulntarget-c 打靶记录
374 0
|
存储 网络协议 数据安全/隐私保护
西门子S7comm流量与Snap7 ClientDemo操作过程分析(上)
西门子S7comm流量与Snap7 ClientDemo操作过程分析
864 0
|
存储 弹性计算 移动开发
2023阿里云无影云电脑使用教程分享(详细)
2023阿里云无影云电脑使用教程分享(详细)阿里云无影云电脑即无影云电脑,云电脑如何使用?云电脑购买后没有用户名和密码,先创建用户设置密码,才可以登录连接到云电脑。云电脑想要访问公网还需要开通互联网访问功能。阿里云百科来详细说下阿里云无影云电脑从购买、创建用户名密码和访问互联网全过程
1871 0
|
存储 数据库
西门子S7comm流量与Snap7 ClientDemo操作过程分析(下)
西门子S7comm流量与Snap7 ClientDemo操作过程分析
1016 0