【玄关】RE求debug
查看原帖
【玄关】RE求debug
1163457
UncleEric楼主2024/7/23 19:53

如题,#1 RE

洛谷ide与dev_c++可以出结果

代码可读性不一定高(

#include<bits/stdc++.h>
#define int long long
#define rint register int
using namespace std;
const int MOD=2520;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	return f*x;
}
int t,dp[20][2601][50],y[2601];
inline int gcd(int a,int b){return b?gcd(b,a%b):a;}
inline int lcm(int a,int b){return a*b/(a>=b?gcd(a,b):gcd(b,a));}
vector<int> num;

inline void init(){
	memset(dp,-1,sizeof(dp));
	rint num=0;
	for(rint i=1;i<=MOD;i++)if(!(MOD%i))y[i]=++num;
	return;
}

inline int dfs(int x,int f,int l,int m){
	if(x==-1)return f%l==0;
	if((!m)&&dp[x][f][y[l]]!=-1)return dp[x][f][y[l]];
	int ans=0,u=m?num[x]:9;
	for(rint i=0;i<=u;i++)ans+=dfs(x-1,((f<<3)+(f<<1)+i)%MOD,i?lcm(l,i):l,m&&(i==u));
	if(!m)dp[x][f][y[l]]=ans;
	return ans;
}

inline int query(int a){
	num.clear();
	while(a){num.push_back(a%10);a/=10;}
	return dfs(num.size()-1,0,1,1);
}

signed main(){
	t=read();init();
	while(t--){
		int a=read(),b=read();
		cout<<query(b)-query(a-1)<<endl;
	}
	return 0;
}
2024/7/23 19:53
加载中...