70分求助!!!谢谢
查看原帖
70分求助!!!谢谢
406934
xingyu369楼主2022/5/3 00:11
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int a[12];
long long f[12][2][10][10][2][2][2];
long long n,m;
long long dfs(int u,bool limit,int next,int nexx,bool ok,bool is4,bool is8){
    if(is4&&is8)
        return 0;
	if(u==0)
		return ok;
	if(f[u][limit][next][nexx][ok][is4][is8]!=-1)
		return f[u][limit][next][nexx][ok][is4][is8];
	int t=limit?a[u]:9,k=(u==11)?1:0;
	long long r=0;
	for(int i=k;i<=t;i++)
		r+=dfs(u-1,limit&&(i==a[u]),i,next,ok||(i==nexx&&i==next),is4||(i==4),is8||(i==8));
	f[u][limit][next][nexx][ok][is4][is8]=r;
	return r;
}
long long s(long long x){
	if(x==10000000000)
		return 0;
	int l=0;
	memset(f,-1,sizeof f);
	while(x){
		a[++l]=x%10;
		x/=10;
	}
	return dfs(l,1,0,0,0,0,0);
}
int main(){
	scanf("%lld%lld",&n,&m);
	printf("%lld",s(m)-s(n-1));
	return 0;
}

1,4,5点不过

2022/5/3 00:11
加载中...