事情是这个样子的
我写完之后连交5发RE on 1(此时是自动识别语言,经CF上查看是C++14)
怎么改都不对,很迷惑
然后一怒之下把语言改成了C++20
过了。。。
想问问是为什么
代码如下:
#include <bits/stdc++.h>
#define pii pair<int,int>
#define mkp make_pair
#define pb push_back
#define Y 2520
#define int long long
using namespace std;
int T,l,r,f[25][2525][55];
int mp[2525],tot=0;
vector<int>v;
int gcd(int x,int y){return y==0?x:gcd(y,x%y);}
int lcm(int x,int y){return x*y/gcd(x,y);}
//void add_edge(int x,int y ){to[++cnt]=y;nxt[cnt]=head[x];head[x]=cnt;}
void init(){
memset(f,-1,sizeof(f));
for(int i=1;i<=Y;i++)
if(Y%i==0)mp[i]=++tot;
}
int dfs(int pos,int lft,int mul,int flag){
if(pos==-1)return lft%mul==0;
if(!flag&&f[pos][lft][mp[mul]]!=-1)return f[pos][lft][mp[mul]];
int ans=0,mx=(flag==1)?v[pos]:9;
for(int i=0;i<=mx;i++){
int nw=(lft*10+i)%Y,nxt_mul=mul;
if(i)nxt_mul=lcm(mul,i);
ans+=dfs(pos-1,nw,nxt_mul,flag&&(i==mx));
}
if(!flag)f[pos][lft][mp[mul]]=ans;
return ans;
}
int solve(int nw){
v.clear();while(nw)v.pb(nw%10),nw/=10;
return dfs(v.size()-1,0,1,1);
}
signed main()
{
init();cin>>T;
while(T--){cin>>l>>r;cout<<solve(r)-solve(l-1)<<endl;}
return 0;
}