记搜90pts求调
查看原帖
记搜90pts求调
1200842
hypixel_zhb666楼主2024/6/24 11:16

调一上午了总是就WA一个点

代码

#include<bits/stdc++.h>
using namespace std;
int len,a[12];
long long L,R,dp[11][11][11][2][2][2][2];
long long dfs(int pos,int p1,int p2,bool t,bool limit,bool _4,bool _8){
	if(_4&&_8) return 0;
	if(pos<=0) return t;
	long long &v=dp[pos][p1][p2][t][limit][_4][_8];
	if(~v) return v;
	long long res=0;
	int now=limit?a[pos]:9;
	for(int i=0;i<=now;i++){
		if(pos==len&&!i) continue;
		res+=dfs(pos-1,i,p1,t||(i==p1&&i==p2),limit&&(i==now),_4||i==4,_8||i==8);
	}
	if(!limit) v=res;
	return res;
}
long long search(long long x){
	if(x<1e10) return 0;
	memset(dp,-1,sizeof dp);
	for(len=0;x;x/=10) a[++len]=x%10;
	return dfs(len,-1,-1,0,1,a[len]==4,a[len]==8);
}
int main(){
	scanf("%lld%lld",&L,&R);
	return printf("%lld\n",search(R)-search(L-1)),0;
}
2024/6/24 11:16
加载中...