求助求助,不开O2 50 开O2 100,不知为何常数如此巨大
查看原帖
求助求助,不开O2 50 开O2 100,不知为何常数如此巨大
73847
OYBDOOO楼主2020/6/10 17:41

码子如下

#include<bits/stdc++.h>
using namespace std;
long long fg,len;
long long mp[22][200][200][2];
string ss;
long long dfs(long long cur,long long x,long long xx,long long f)
{
	long long i,v=9;
	if(cur==len)
	{
		long long kkk=(x==0)&&(xx==fg);
		if(kkk==1&&fg==2)
			long long my=-1;
		return (x==0)&&(xx==fg);
	}
	if(mp[cur][x][xx][f]!=-1)return mp[cur][x][xx][f];
	if(f)v=ss[cur]-'0';
	long long ret=0;
	for(i=0;i<=v;i++)
	{
		ret+=dfs(cur+1,(x*10+i)%fg,xx+i,f&(i==v));
	}
	mp[cur][x][xx][f]=ret;
	return ret;
}
long long ask(string x)
{
	len=x.size();
	ss=x;
	memset(mp,-1,sizeof(mp));
	return dfs(0,0,0,1);
}
long long chk(string x)
{
	long long i,aa=0,bb=0;
	for(i=0;i<x.size();i++)
		aa=aa*10+x[i]-'0',bb+=x[i]-'0';
	if(aa%fg==0&&bb==fg)return 1;
	else return 0;
}
int main()
{
	string A,B;
	cin>>A>>B;
	long long all=0;
	long long i;
	for(i=1;i<=180;i++)
	{
		fg=i;
//		long long lsa=ask(B);
//		long long lsb=ask(A);
		all+=ask(B)-ask(A)+chk(A);
	}
	cout<<all;
	return 0;
}
2020/6/10 17:41
加载中...