0pts求调
查看原帖
0pts求调
1142179
Main_Lid楼主2024/12/21 08:51
#include<bits/stdc++.h>
using namespace std;
#define int long long
int l,r;
int f[15][11][11][2][2][2],a[15];
int t;
int dfs1(int pos,int pre,int ppre,int sim,bool st,bool s8,bool s4,bool lead)
{
	if(pos==0)return st&&(s8^s4);
	if(!sim&&!lead&&f[pos][pre][ppre][st][s8][s4]!=-1)return f[pos][pre][ppre][st][s8][s4];
	int res=0,up=sim?a[pos]:9;
	for(int i=0;i<=up;i++)
	{
		res+=dfs1(pos-1,i,pre,sim&&i==up,st||(i==pre&&pre==ppre&&pos&&pos&&!lead),s8||(i==8),s4||(i==4),lead&&(i==0));
	}
	return sim?res:(lead?res:f[pos][pre][ppre][st][s8][s4]=res);
}
int c1(int x)
{
	memset(f,-1,sizeof f);
	int len=0;
	while(x)
	{
		a[++len]=x%10;
		x/=10;
	}
	return dfs1(len,0,0,1,0,0,0,1);
}
signed main()
{
	cin>>l>>r;
	cout<<c1(r)-c1(l-1);
	return 0;
}
2024/12/21 08:51
加载中...