萌新这份代码不知为何一直调不过,求助谢谢
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 20;
#define ll long long
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
ll len;
ll a[MAXN],dp[MAXN][4][10][2][2];
stack<ll> query;
ll dfs(ll pos,ll state,ll pre,bool flag8,bool flag4,bool limit,bool head){
if(flag4&&flag8) return 0;
if(pos > len){
if(state == 3&&!(flag8&&flag4)){
return 1;
}else{
return 0;
}
}
if(dp[pos][state][pre][flag8][flag4] != -1&&!limit&&!head) return dp[pos][state][pre][flag8][flag4];
ll t = (limit?a[len-pos+1]:9);
ll ans = 0;
for(int i = 0;i <= t;i++){
if(head&&!i) continue;
ans += dfs(pos+1,(state==3?3:((i == pre)?state+1:1)),i,((i==8||flag8)?1:0),((i==4||flag4)?1:0),(limit&&i==t)?1:0,0);
}
if(!limit&&!head) dp[pos][state][pre][flag8][flag4] = ans;
return ans;
}
int main(){
ll n,m;
scanf("%lld%lld",&n,&m);
n--;
while(n){
a[++len]=n%10;
n/=10;
}
memset(dp,-1,sizeof(dp));
ll ansl = dfs(1,1,-1,0,0,1,1);
len = 0;
while(m){
a[++len]=m%10;
m/=10;
}
memset(dp,-1,sizeof(dp));
ll ansr = dfs(1,1,-1,0,0,1,1);
printf("%lld",ansr-ansl);
return 0;
}