90 没过样例求助!
查看原帖
90 没过样例求助!
672281
InversionShadow楼主2023/11/8 09:58

rt.

思路数位 dp

#include <bits/stdc++.h>
#define int unsigned long long

using namespace std;

const int N = 1e5 + 100;

int L, R, a[N], f[200][200], 
cnt;

int dfs(int x, int sum, bool vis, int d) {
//	cout << x << endl;
	if (!x) {
		return sum;
	}
	if (!vis && f[x][sum]) {
		return f[x][sum];
	}
	int r = vis ? a[x] : 9, ans = 0;
	for (int i = 0; i <= r; i++) {
		ans = (ans + dfs(x - 1, sum + (i == d), vis && i == r ? 1 : 0, d));
	}
	if (!vis) {
		f[x][sum] = ans;
	}
	return ans;
}

int solve(int n, int x) {
	cnt = 0;
	memset(a, 0, sizeof(a));
	while (n) {
		a[++cnt] = n % 10;
		n /= 10;
	}
	return dfs(cnt, 0, 1, x);
}

signed main() {
	cin >> L >> R;
	for (int i = 0; i <= 9; i++) {
		cout << solve(R, i) - solve(L - 1, i) << ' ';
	} 
	return 0;
}
2023/11/8 09:58
加载中...