滥用long long,很多地方(比如dfs传参)开int就行
by panyf @ 2020-06-10 18:28:14
@[AK新手村](/user/221955) 可能是这个的问题,谢谢大佬/se
by OYBDOOO @ 2020-06-10 18:44:45
@[OYBDOOO](/user/73847)
```cpp
#include<bits/stdc++.h>
#pragma GCC diagnostic error "-std=c++11"
#pragma GCC target("avx")
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
using namespace std;
int fg,len;
long mp[22][200][200][2];
string ss;
inline long long dfs(long long cur,long long x,long long xx,long long f)
{
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;
}
inline long long ask(string x)
{
len=x.size();
ss=x;
memset(mp,-1,sizeof(mp));
return dfs(0,0,0,1);
}
inline int 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);
}
printf("%lld",all);
return 0;
}
```
by 103PA @ 2020-06-10 19:07:32
@[103PA](/user/260925) 额这。。。
by OYBDOOO @ 2020-06-10 20:14:58