有人愿意看看萌新又臭又长的代码吗?(真香警告)
查看原帖
有人愿意看看萌新又臭又长的代码吗?(真香警告)
95346
OdtreePrince楼主2020/6/12 14:35

f[a][b][c][d][e][f][g]:

a表示枚举到第i位(从高到低)

b表示是否有4

c表示是否有8

d表示连续几位(大于3默认为3)

e表示当前是什么数

f表示是否有连续3位

g=1表示当前数和询问的数字相同

g=0表示当前数比询问的数字小

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL f[15][2][2][5][15][2][2],l,r,a[15];
inline LL calc(LL n){
	memset(f,0,sizeof(f));int tot=0;
	while(n) a[++tot]=n%10,n/=10;
	for(register int i=1;i<=a[tot];i++){
		if(i==4) f[11][1][0][1][i][0][i==a[tot]]=1;
		else if(i==8) f[11][0][1][1][i][0][i==a[tot]]=1;
		else f[11][0][0][1][i][0][i==a[tot]]=1;
	}
	for(register int i=10;i;i--)
	for(register int j=0;j<=9;j++){
		for(register int k=0;k<=9;k++)
		if(j!=k) if(j==4){
			for(register int p=1;p<=2;p++)
			for(register int q=0;q<2;q++){
				if(j<a[i]) f[i][1][0][1][j][0][0]+=f[i+1][q][0][p][k][1][1];
				f[i][1][0][1][j][0][0]+=f[i+1][q][0][p][k][0][0];
				if(j==a[i]) f[i][1][0][1][j][0][1]+=f[i+1][q][0][p][k][1][1];
				if(j<a[i]) f[i][1][0][1][j][1][0]+=f[i+1][q][0][p][k][1][1];
				f[i][1][0][1][j][1][0]+=f[i+1][q][0][p][k][1][0];
				if(j==a[i]) f[i][1][0][1][j][1][1]+=f[i+1][q][0][p][k][1][1];
			}
			if(j<a[i]) f[i][1][0][1][j][1][0]+=f[i+1][1][0][3][k][1][1];
			f[i][1][0][1][j][1][0]+=f[i+1][1][0][3][k][1][0];
			if(j==a[i]) f[i][1][0][1][j][1][1]+=f[i+1][1][0][3][k][1][1];
			if(j<a[i]) f[i][1][0][1][j][1][0]+=f[i+1][0][0][3][k][1][1];
			f[i][1][0][1][j][1][0]+=f[i+1][0][0][3][k][1][0];
			if(j==a[i]) f[i][1][0][1][j][1][1]+=f[i+1][0][0][3][k][1][1];
		}
		else if(j==8){
			for(register int p=1;p<=2;p++)
			for(register int q=0;q<2;q++){
				if(j<a[i]) f[i][0][1][1][j][0][0]+=f[i+1][0][q][p][k][0][1];
				if(j==a[i]) f[i][0][1][1][j][0][1]+=f[i+1][0][q][p][k][0][1];
				f[i][0][1][1][j][0][0]+=f[i+1][0][q][p][k][0][0];
				if(j<a[i]) f[i][0][1][1][j][1][0]+=f[i+1][0][q][p][k][1][1];
				if(j==a[i]) f[i][0][1][1][j][1][1]+=f[i+1][0][q][p][k][1][1];
				f[i][0][1][1][j][1][0]+=f[i+1][0][q][p][k][1][0];
			}
			if(j<a[i]) f[i][0][1][1][j][1][0]+=f[i+1][0][0][3][k][1][1];
			if(j==a[i]) f[i][0][1][1][j][1][1]+=f[i+1][0][0][3][k][1][1];
			f[i][0][1][1][j][1][0]+=f[i+1][0][0][3][k][1][0];
			if(j<a[i]) f[i][0][1][1][j][1][0]+=f[i+1][0][1][3][k][1][1];
			if(j==a[i]) f[i][0][1][1][j][1][1]+=f[i+1][0][1][3][k][1][1];
			f[i][0][1][1][j][1][0]+=f[i+1][0][1][3][k][1][0];
		}
		else{
			if(j<a[i]) f[i][0][0][1][j][0][0]+=f[i+1][0][0][1][k][0][1];
			if(j==a[i]) f[i][0][0][1][j][0][1]+=f[i+1][0][0][1][k][0][1];
			f[i][0][0][1][j][0][0]+=f[i+1][0][0][1][k][0][0];
			if(j<a[i]) f[i][0][0][1][j][0][0]+=f[i+1][0][0][2][k][0][1];
			if(j==a[i]) f[i][0][0][1][j][0][1]+=f[i+1][0][0][2][k][0][1];
			f[i][0][0][1][j][0][0]+=f[i+1][0][0][2][k][0][0];
			if(j<a[i]) f[i][0][1][1][j][0][0]+=f[i+1][0][1][1][k][0][1];
			if(j==a[i]) f[i][0][1][1][j][0][1]+=f[i+1][0][1][1][k][0][1];
			f[i][0][1][1][j][0][0]+=f[i+1][0][1][1][k][0][0];
			if(j<a[i]) f[i][0][1][1][j][0][0]+=f[i+1][0][1][2][k][0][1];
			if(j==a[i]) f[i][0][1][1][j][0][1]+=f[i+1][0][1][2][k][0][1];
			f[i][0][1][1][j][0][0]+=f[i+1][0][1][2][k][0][0];
			if(j<a[i]) f[i][1][0][1][j][0][0]+=f[i+1][1][0][1][k][0][1];
			if(j==a[i]) f[i][1][0][1][j][0][1]+=f[i+1][1][0][1][k][0][1];
			f[i][1][0][1][j][0][0]+=f[i+1][1][0][1][k][0][0];
			if(j<a[i]) f[i][1][0][1][j][0][0]+=f[i+1][1][0][2][k][0][1];
			if(j==a[i]) f[i][1][0][1][j][0][1]+=f[i+1][1][0][2][k][0][1];
			f[i][1][0][1][j][0][0]+=f[i+1][1][0][2][k][0][0];
			if(j<a[i]) f[i][0][0][1][j][1][0]+=f[i+1][0][0][1][k][1][1];
			if(j==a[i]) f[i][0][0][1][j][1][1]+=f[i+1][0][0][1][k][1][1];
			f[i][0][0][1][j][1][0]+=f[i+1][0][0][1][k][1][0];
			if(j<a[i]) f[i][0][0][1][j][1][0]+=f[i+1][0][0][2][k][1][1];
			if(j==a[i]) f[i][0][0][1][j][1][1]+=f[i+1][0][0][2][k][1][1];
			f[i][0][0][1][j][1][0]+=f[i+1][0][0][2][k][1][0];
			if(j<a[i]) f[i][0][1][1][j][1][0]+=f[i+1][0][1][1][k][1][1];
			if(j==a[i]) f[i][0][1][1][j][1][1]+=f[i+1][0][1][1][k][1][1];
			f[i][0][1][1][j][1][0]+=f[i+1][0][1][1][k][1][0];
			if(j<a[i]) f[i][0][1][1][j][1][0]+=f[i+1][0][1][2][k][1][1];
			if(j==a[i]) f[i][0][1][1][j][1][1]+=f[i+1][0][1][2][k][1][1];
			f[i][0][1][1][j][1][0]+=f[i+1][0][1][2][k][1][0];
			if(j<a[i]) f[i][0][1][1][j][1][0]+=f[i+1][0][1][3][k][1][1];
			if(j==a[i]) f[i][0][1][1][j][1][1]+=f[i+1][0][1][3][k][1][1];
			f[i][0][1][1][j][1][0]+=f[i+1][0][1][3][k][1][0];
			if(j<a[i]) f[i][1][0][1][j][1][0]+=f[i+1][1][0][1][k][1][1];
			if(j==a[i]) f[i][1][0][1][j][1][1]+=f[i+1][1][0][1][k][1][1];
			f[i][1][0][1][j][1][0]+=f[i+1][1][0][1][k][1][0];
			if(j<a[i]) f[i][1][0][1][j][1][0]+=f[i+1][1][0][2][k][1][1];
			if(j==a[i]) f[i][1][0][1][j][1][1]+=f[i+1][1][0][2][k][1][1];
			f[i][1][0][1][j][1][0]+=f[i+1][1][0][2][k][1][0];
			if(j<a[i]) f[i][1][0][1][j][1][0]+=f[i+1][1][0][3][k][1][1];
			if(j==a[i]) f[i][1][0][1][j][1][1]+=f[i+1][1][0][3][k][1][1];
			f[i][1][0][1][j][1][0]+=f[i+1][1][0][3][k][1][0];
		}
		if(j==4){
			if(j<a[i]) f[i][1][0][2][j][0][0]+=f[i+1][1][0][1][j][0][1];
			if(j==a[i]) f[i][1][0][2][j][0][1]+=f[i+1][1][0][1][j][0][1];
			f[i][1][0][2][j][0][0]+=f[i+1][1][0][1][j][0][0];
			if(j<a[i]) f[i][1][0][2][j][1][0]+=f[i+1][1][0][1][j][1][1];
			if(j==a[i]) f[i][1][0][2][j][1][1]+=f[i+1][1][0][1][j][1][1];
			f[i][1][0][2][j][1][0]+=f[i+1][1][0][1][j][1][0];
			if(j<a[i]) f[i][1][0][3][j][1][0]+=f[i+1][1][0][2][j][0][1];
			if(j==a[i]) f[i][1][0][3][j][1][1]+=f[i+1][1][0][2][j][0][1];
			f[i][1][0][3][j][1][0]+=f[i+1][1][0][2][j][0][0];
			if(j<a[i]) f[i][1][0][3][j][1][0]+=f[i+1][1][0][2][j][1][1];
			if(j==a[i]) f[i][1][0][3][j][1][1]+=f[i+1][1][0][2][j][1][1];
			f[i][1][0][3][j][1][0]+=f[i+1][1][0][2][j][1][0];
		}
		else if(j==8){
			if(j<a[i]) f[i][0][1][2][j][0][0]+=f[i+1][0][1][1][j][0][1];
			if(j==a[i]) f[i][0][1][2][j][0][1]+=f[i+1][0][1][1][j][0][1];
			f[i][0][1][2][j][0][0]+=f[i+1][0][1][1][j][0][0];
			if(j<a[i]) f[i][0][1][2][j][1][0]+=f[i+1][0][1][1][j][1][1];
			if(j==a[i]) f[i][0][1][2][j][1][1]+=f[i+1][0][1][1][j][1][1];
			f[i][0][1][2][j][1][0]+=f[i+1][0][1][1][j][1][0];
			if(j<a[i]) f[i][0][1][3][j][1][0]+=f[i+1][0][1][2][j][0][1];
			if(j==a[i]) f[i][0][1][3][j][1][1]+=f[i+1][0][1][2][j][0][1];
			f[i][0][1][3][j][1][0]+=f[i+1][0][1][2][j][0][0];
			if(j<a[i]) f[i][0][1][3][j][1][0]+=f[i+1][0][1][2][j][1][1];
			if(j==a[i]) f[i][0][1][3][j][1][1]+=f[i+1][0][1][2][j][1][1];
			f[i][0][1][3][j][1][0]+=f[i+1][0][1][2][j][1][0];
		}
		else{
			if(j<a[i]) f[i][0][0][2][j][0][0]+=f[i+1][0][0][1][j][0][1];
			if(j==a[i]) f[i][0][0][2][j][0][1]+=f[i+1][0][0][1][j][0][1];
			f[i][0][0][2][j][0][0]+=f[i+1][0][0][1][j][0][0];
			if(j<a[i]) f[i][0][0][2][j][1][0]+=f[i+1][0][0][1][j][1][1];
			if(j==a[i]) f[i][0][0][2][j][1][1]+=f[i+1][0][0][1][j][1][1];
			f[i][0][0][2][j][1][0]+=f[i+1][0][0][1][j][1][0];
			if(j<a[i]) f[i][0][0][3][j][1][0]+=f[i+1][0][0][2][j][0][1];
			if(j==a[i]) f[i][0][0][3][j][1][1]+=f[i+1][0][0][2][j][0][1];
			f[i][0][0][3][j][1][0]+=f[i+1][0][0][2][j][0][0];
			if(j<a[i]) f[i][0][0][3][j][1][0]+=f[i+1][0][0][2][j][1][1];
			if(j==a[i]) f[i][0][0][3][j][1][1]+=f[i+1][0][0][2][j][1][1];
			f[i][0][0][3][j][1][0]+=f[i+1][0][0][2][j][1][0];
			if(j<a[i]) f[i][1][0][2][j][0][0]+=f[i+1][1][0][1][j][0][1];
			if(j==a[i]) f[i][1][0][2][j][0][1]+=f[i+1][1][0][1][j][0][1];
			f[i][1][0][2][j][0][0]+=f[i+1][1][0][1][j][0][0];
			if(j<a[i]) f[i][1][0][2][j][1][0]+=f[i+1][1][0][1][j][1][1];
			if(j==a[i]) f[i][1][0][2][j][1][1]+=f[i+1][1][0][1][j][1][1];
			f[i][1][0][2][j][1][0]+=f[i+1][1][0][1][j][1][0];
			if(j<a[i]) f[i][1][0][3][j][1][0]+=f[i+1][1][0][2][j][0][1];
			if(j==a[i]) f[i][1][0][3][j][1][1]+=f[i+1][1][0][2][j][0][1];
			f[i][1][0][3][j][1][0]+=f[i+1][1][0][2][j][0][0];
			if(j<a[i]) f[i][1][0][3][j][1][0]+=f[i+1][1][0][2][j][1][1];
			if(j==a[i]) f[i][1][0][3][j][1][1]+=f[i+1][1][0][2][j][1][1];
			f[i][1][0][3][j][1][0]+=f[i+1][1][0][2][j][1][0];
			if(j<a[i]) f[i][0][1][2][j][0][0]+=f[i+1][0][1][1][j][0][1];
			if(j==a[i]) f[i][0][1][2][j][0][1]+=f[i+1][0][1][1][j][0][1];
			f[i][0][1][2][j][0][0]+=f[i+1][0][1][1][j][0][0];
			if(j<a[i]) f[i][0][1][2][j][1][0]+=f[i+1][0][1][1][j][1][1];
			if(j==a[i]) f[i][0][1][2][j][1][1]+=f[i+1][0][1][1][j][1][1];
			f[i][0][1][2][j][1][0]+=f[i+1][0][1][1][j][1][0];
			if(j<a[i]) f[i][0][1][3][j][1][0]+=f[i+1][0][1][2][j][0][1];
			if(j==a[i]) f[i][0][1][3][j][1][1]+=f[i+1][0][1][2][j][0][1];
			f[i][0][1][3][j][1][0]+=f[i+1][0][1][2][j][0][0];
			if(j<a[i]) f[i][0][1][3][j][1][0]+=f[i+1][0][1][2][j][1][1];
			if(j==a[i]) f[i][0][1][3][j][1][1]+=f[i+1][0][1][2][j][1][1];
			f[i][0][1][3][j][1][0]+=f[i+1][0][1][2][j][1][0];
		}
	}
	LL ans=0;for(register int j=0;j<=9;j++)
	for(register int k=1;k<=3;k++)
	ans+=f[1][0][0][k][j][1][0]+f[1][0][0][k][j][1][1],
	ans+=f[1][1][0][k][j][1][0]+f[1][1][0][k][j][1][1],
	ans+=f[1][0][1][k][j][1][0]+f[1][0][1][k][j][1][1];return ans;
}
inline int read(){
	int ret=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') f=-f;ch=getchar();}
	while(isdigit(ch)) ret=(ret<<1)+(ret<<3)+ch-'0',ch=getchar();
	return ret*f;
}
int main(){
	cin>>l>>r;cout<<calc(r)-calc(l-1);
	return 0;
}
2020/6/12 14:35
加载中...