我和题解对拍了380000组数据,结果交上去爆零了
#include<bits/stdc++.h>
#define int long long
using namespace std;
long long a,b,m[15],d[15],dp[15][10];
int dig(long long w)
{
int s=1;
while(w/=10)s++;
return s;
}
void solve(int ws,long long sh,bool qdl,int w,bool free)
{
if(ws==0)return;
int lim=(free?9:sh/m[ws-1]%10);
if(ws==1)
{
lim++;
}
for(int i=1;i<lim;i++)
{
d[i]+=w*m[ws-1];
for(int j=0;j<=9;j++)
{
d[j]+=dp[ws-1][j]*w;
}
}
if(qdl)
{
solve(ws-1,sh,1,w,1);
}
else if(lim)
{
d[0]+=w*m[ws-1];
for(int j=0;j<=9;j++)
{
d[j]+=dp[ws-1][j]*w;
}
}
if(ws>1)
{
if(!free)d[lim]+=(sh%m[ws-1]+1)*w;
else d[lim]+=m[ws-1]*w;
solve(ws-1,sh,0,w,free);
}
}
signed main()
{
cin>>a>>b;
m[0]=1;
for(int i=1;i<=15;i++)m[i]=m[i-1]*10;
for(int i=1;i<=12;i++)
{
for(int j=0;j<10;j++)
{
dp[i][j]+=10*dp[i-1][j]+m[i-1];
}
}
solve(dig(b),b,1,1,0);
solve(dig(a-1),a-1,1,-1,0);
for(int i=0;i<10;i++)cout<<d[i]<<' ';
cout<<endl;
return 0;
}