谁能帮康康?QAQ
查看原帖
谁能帮康康?QAQ
211960
nzynzy楼主2021/4/7 16:09
#include<iostream>
#include<cstring>
using namespace std;
long long n,m;
int num[19]; 
int f[13][3][3][3][3][18][18];
int dfs(int location,bool limit,bool bs8,bool bs4,bool lian,int pre1,int pre2){
    if(location==0)return 1;
    if(f[location][limit][bs8][bs4][lian][pre1][pre2]!=-1)return f[location][limit][bs8][bs4][lian][pre1][pre2];
    int ans=0;
    int temp=limit?num[location]:9; 
    for(int i=0;i<=temp;i++){
        if(bs8&&i==4)continue;
        if(bs4&&i==8)continue;
        ans+=dfs(location-1,limit&&(num[location]==i),bs8||i==8,bs4||i==4,lian||(i==pre1&&i==pre2),i,pre1);
    }
   f[location][limit][bs8][bs4][lian][pre1][pre2]=ans;
    return ans;
}
int solve(long long x){
    int location=0;
    while(x){
        num[++location]=x%10;
        x/=10;
    }
    return dfs(location,1,0,0,0,0,0);
}
int main(){
cin>>n>>m;
memset(f,-1,sizeof f);
long long s1=solve(m),s2=solve(n-1);
cout<<s1-s2;
    return 0;
}
2021/4/7 16:09
加载中...