求助!!!
查看原帖
求助!!!
522067
_Violet_Evergarden楼主2022/10/4 19:29
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll l,r;
ll f[211][211];
ll num[211];
ll mod=1e9+7;
ll e; 
ll dfs(ll pos,ll x,ll limit,ll sum,ll p){
	if(pos==0&&p==0){
		if(e!=1||x<=num[pos]){
			return 1;
		}
		else{
			return 0;
		}
	}
	if(!pos) return sum;
	if(!limit&&f[pos][sum]!=-1){
		return f[pos][sum];
	}
	ll ans=0;
	ll up=limit?num[pos]:9;
	if(p==1){
		for(ll i=0;i<=up;i++){
			ans+=dfs(pos-1,x,limit&&i==num[pos],sum+(i==x),p);
		}
	}
	else{
		for(ll i=1;i<=up;i++){
			ans+=dfs(pos-1,x,limit&&i==num[pos],sum+(i==x),1);
		}
		ans+=dfs(pos-1,x,0,0,0);
	}
	if(!limit){
		f[pos][sum]=ans;
	}
	return ans;
}
ll solve(ll a,ll k){
	e=0;
	if(a==0){
		num[++e]=0;
	}
	while(a){
		num[++e]=a%10;
		a/=10; 
	}
	return dfs(e,k,1,0,0);
}
int main()
{
	memset(f,-1,sizeof f);
	cin>>l>>r;
	ll ans=0;
	for(ll i=0;i<=9;i++){
		cout<<solve(r,i)-solve(l-1,i)<<" ";
		ans=0;
	}
	return 0;
}

90分 WA#9

2022/10/4 19:29
加载中...