WA #1 #4 #5 求助
查看原帖
WA #1 #4 #5 求助
324545
xiaolangwhite楼主2023/7/15 10:21

萌新这份代码不知为何一直调不过,求助谢谢

#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;
}
2023/7/15 10:21
加载中...