• 洛谷 P4124 [CQOI2016]*


    题目传送门

    解题思路:

    搜的时候记录8,4和三连就行.

    AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 
     7 long long l,r;
     8 int s[15],f[15][15][15][2][2][2][2],len;
     9 
    10 inline long long dfs(int d,int p,bool li,bool _4,bool _8,int xs,bool vis,int o) {
    11     if(d > len) return vis | 0;
    12     if(f[d][p][o][li][_4][_8][vis] != -1) return f[d][p][o][li][_4][_8][vis];
    13     long long ans = 0;
    14     int res = li ? s[len-d+1] : 9;
    15     for(int i = (d == 1) ? 1 : 0;i <= res; i++) {
    16         if((i == 4 && _8) || (i == 8 && _4)) continue;
    17         if(i == p) ans += dfs(d + 1,i,li && (i == res),_4 || (i == 4),_8 || (i == 8),xs + 1,vis || ((xs + 1) >= 3),p);
    18         else ans += dfs(d + 1,i,li && (i == res),_4 || (i == 4),_8 || (i == 8),1,vis || (xs >= 3),p);
    19     }
    20     f[d][p][o][li][_4][_8][vis] = ans;
    21     return ans;
    22 }
    23 
    24 inline long long solve(long long x) {
    25     len = 0;
    26     while(x) {
    27         s[++len] = x % 10;
    28         x /= 10;
    29     }
    30     memset(f,-1,sizeof(f));
    31     if(len < 11) return 0;
    32     return dfs(1,-1,1,0,0,1,0,-1);
    33 }
    34 
    35 int main() {
    36     scanf("%lld%lld",&l,&r);
    37     printf("%lld",solve(r) - solve(l - 1));
    38     return 0;
    39 }
  • 相关阅读:
    视频像素点级的标注
    unet
    Emmet缩写语法
    Nginx漏洞利用与安全加固
    算法时间复杂度
    动态规划dp
    数据结构Java实现04---树及其相关操作
    关于递归
    Java正则表达式
    Java String相关
  • 原文地址:https://www.cnblogs.com/lipeiyi520/p/13488108.html
Copyright © 2020-2023  润新知