zoukankan      html  css  js  c++  java
  • BZOJ 4521 *

    SB数位dp.

    我的貌似要特判9999999999的情况。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    long long l,r,dp[13][4][10][2][2][2],ret=0,bit[15];
    void reset()
    {
        for (long long i=0;i<=11;i++)
            for (long long j=0;j<=3;j++) 
                for (long long k=0;k<=9;k++)
                    for (long long l=0;l<=1;l++)
                        for (long long a=0;a<=1;a++)
                            for (long long b=0;b<=1;b++)
                                dp[i][j][k][l][a][b]=-1;
    }
    void get_bit(long long x)
    {
        ret=0;
        while (x) {bit[++ret]=x%10;x/=10;}
    }
    long long dfs(long long pos,long long cnt,long long num,long long f,long long f1,long long f2,bool flag)
    {
        if (!pos) return f;
        if ((!flag) && (dp[pos][cnt][num][f][f1][f2]!=-1)) return dp[pos][cnt][num][f][f1][f2];
        long long ans=0,up=flag?bit[pos]:9,tc;
        for (long long i=0;i<=up;i++)
        {
            if ((i==4) && (f2)) continue;
            if ((i==8) && (f1)) continue;
            if (i==num) tc=min(cnt+1,3LL);else tc=1;
            ans+=dfs(pos-1,tc,i,f|(tc==3),f1|(i==4),f2|(i==8),flag&&(i==up));
        }
        if (!flag) dp[pos][cnt][num][f][f1][f2]=ans;
        return ans;
    }
    long long ask(long long x)
    {
        get_bit(x);
        if (x==9999999999LL) return dfs(ret,1,0,0,0,0,1);
        else return dfs(ret,0,-1,0,0,0,1);
    }
    int main()
    {
        scanf("%lld%lld",&l,&r);reset();
        printf("%lld
    ",ask(r)-ask(l-1));
        return 0;
    }
  • 相关阅读:
    Premetheus告警QQ邮箱
    Prometheus+grafana监控SpringBoot2应用
    Grafana整合Prometheus
    Prometheus:入门初体验
    接口幂等性思路
    OpenFeign远程调用丢失请求头问题解决办法
    gradle构建脚本
    windows安装gradle
    CompletableFuture异步编排
    线程池(ThreadPoolExcutor)基本介绍
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/6239258.html
Copyright © 2011-2022 走看看