30pts求调
查看原帖
30pts求调
1015780
newbieTroll楼主2023/11/17 20:44
#include<bits/stdc++.h>
using namespace std;
const int MOD=1e9+7;
#define int unsigned long long
int l,r;
int dp[1000][1000];
int a[1000];
int kk;
int dfs(int pos,int lim,int sum,int zero){
	int up,res=0;
	if(!pos) return sum;
	if(!lim&&dp[pos][sum]!=-1) return dp[pos][sum];
	up=lim?a[pos]:9;
	for(int i=0;i<=up;++i){
		res+=dfs(pos-1,lim&&i==a[pos],sum+(i==kk&&!(i==0&&zero)),zero&&i==0);
	}
	if(zero==0) dp[pos][sum]=res%MOD;
	return res;
}
int check(int n){
	memset(a,0,sizeof(a));
	memset(dp,-1,sizeof(dp));
	int pos=0;
	while(n){
		a[++pos]=n%10;
		n/=10;
	}
	int a=0,ans=0;
	return dfs(pos,1,0,1);
}
signed main(){
	cin>>l>>r;
	for(kk=0;kk<=9;++kk){
		cout<<check(r)-check(l-1)<<' ';
	}
    return 0;
}
2023/11/17 20:44
加载中...