求问这份代码少考虑了什么情况
查看原帖
求问这份代码少考虑了什么情况
90972
shitbro楼主2020/7/20 20:25
#include <bits/stdc++.h>
#define ll long long
#define MAXN 15
using namespace std;
ll f[MAXN][MAXN],number[MAXN],ans[MAXN];
int d[MAXN];
int cnt = 0;
ll dfs(int ws,int last,bool st,bool flag) {
	if(! ws) return 1;
	if(! flag && last != -1 && f[ws][last]) return f[ws][last];
	int res = flag ? d[ws] : 9;
	ll sum = 0;
	for(int i = 0;i <= res;i ++) {
		if(st && ! i) {
			ll val = dfs(ws - 1,-1,1,flag && (i == res));
		}
		else {
			ll val = dfs(ws - 1,i,0,flag && (i == res));
			number[i] += val;
			sum += val;
		}
	}
	if(! flag && ! st) f[ws][last] = sum;
	return sum;
}
ll dp(ll x) {
	cnt = 0;
	while(x) {
		d[++ cnt] = x % 10;
		x /= 10;
	}
	return dfs(cnt,-1,1,1);
}
int main() {
	ll a,b; scanf("%lld%lld",&a,&b);
	ll B = dp(b);
	for(int i = 0;i <= 9;i ++) {
		ans[i] = number[i];
		number[i] = 0;
	}
	memset(f,0,sizeof f);
	ll A = dp(a - 1);
	for(int i = 0;i <= 9;i ++) printf("%lld ",ans[i] - number[i]);
	return 0;
}

2020/7/20 20:25
加载中...