救命
查看原帖
救命
563663
xu222ux楼主2024/3/7 19:55
#include<bits/stdc++.h>
#define int long long
using namespace std;
int l,r;
int len,tt,s[100];
int f[41][2][2][2][2][2][2][2][2][2][3][4][5][6][7][8][9];
int dfs(int x,int aa2,int aa3,int aa4,int aa5,int aa6,int aa7,int aa8,int aa9,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,bool flag){
	if(!x)return (!a2||!aa2)&&(!a3||!aa3)&&(!a4||!aa4)&&(!a5||!aa5)&&(!a6||!aa6)&&(!a7||!aa7)&&(!a8||!aa8)&&(!a9||!aa9);
	if(!flag&&f[x][aa2][aa3][aa4][aa5][aa6][aa7][aa8][aa9][a2][a3][a4][a5][a6][a7][a8][a9]!=-1)return f[x][aa2][aa3][aa4][aa5][aa6][aa7][aa8][aa9][a2][a3][a4][a5][a6][a7][a8][a9];
	int ans=0,up=flag?s[x]:9;
	for(int i=0;i<=up;i++){
		int a2a=(a2*10+i)%2,a3a=(a3*10+i)%3,a4a=(a4*10+i)%4,a5a=(a5*10+i)%5,a6a=(a6*10+i)%6,a7a=(a7*10+i)%7,a8a=(a8*10+i)%8,a9a=(a9*10+i)%9;
		ans+=dfs(x-1,aa2||i==2,aa3||i==3,aa4||i==4,aa5||i==5,aa6||i==6,aa7||i==7,aa8||i==8,aa9||i==9,a2a,a3a,a4a,a5a,a6a,a7a,a8a,a9a,flag&&i==up);
	}
	if(!flag)f[x][aa2][aa3][aa4][aa5][aa6][aa7][aa8][aa9][a2][a3][a4][a5][a6][a7][a8][a9]=ans;
	return ans;
}
signed main(){
	//for(int i=1;i<=1000000000;i++)cout<<"in"<<endl;
	int t;cin>>t;
	while(t--){
		cin>>l>>r;
		tt=r,len=0;
		while(tt){
			s[++len]=tt%10;
			//cout<<s[len];
			tt/=10;
		}
		memset(f,-1,sizeof f);
		int ansr=dfs(len,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,true);
		//cout<<endl<<ansr<<endl;
		if(l==1){
			cout<<ansr-1<<endl;
			continue;
		}
		tt=l-1,len=0;
		while(tt){
			s[++len]=tt%10;
			//cout<<s[len];
			tt/=10;
		}
		memset(f,-1,sizeof f);
		int ansl=dfs(len,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,true);
		cout<<endl<<ansl<<endl;
		cout<<ansr-ansl<<endl;
	}
	return 0;
}

RE吧,DEVc++和洛谷IDE都有问题。。。

2024/3/7 19:55
加载中...