rt,我的样例只有0的部分过了,其他都输出19,有没有哪位巨佬帮忙调一下QAQ。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int dp[25][100][2][2],num[25];
int dfs(int pos,int now,int ans,bool az,bool limit){
if(pos==0)return ans;
if(dp[pos][ans][az][limit]!=-1){
return dp[pos][ans][az][limit];
}
int end=limit?num[pos]:9;
int sum=0;
for(int i=0;i<=end;i++){
if(az==1&&i==0){
continue;
}
sum+=dfs(pos-1,now,ans+(i==now?1:0),az==1&&i==0,limit==1&&i==end);
}
dp[pos][ans][az][limit]=sum;
return sum;
}
int query(int x,int val){
memset(dp,-1,sizeof(dp));
int cnt=0;
while(x!=0){
cnt++;
num[cnt]=x%10;
x/=10;
}
return dfs(cnt,val,0,1,1);
}
signed main(){
//// int t;
//// cin>>t;
//// while(t--){
int l,r;
cin>>l>>r;
for(int i=0;i<=9;i++){
cout<<query(r,i)-query(l-1,i)<<" ";
}
// }
return 0;
}