萌新求问,C++14和C++20 的区别
查看原帖
萌新求问,C++14和C++20 的区别
114859
shight楼主2022/8/3 20:57

事情是这个样子的

我写完之后连交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;
}

2022/8/3 20:57
加载中...