代码为何厌氧
查看原帖
代码为何厌氧
167697
BartAllen楼主2024/10/22 14:58
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 15;

int a, b, ten[N], dp[N], cnta[N], cntb[N], num[N];

void init() {
	ten[0] = 1;
	for (int i = 1; i <= N; i++) {
		dp[i] = i * ten[i - 1];	// dp[i] = dp[i - 1] * 10 + ten[i - 1]
		ten[i] = ten[i - 1] * 10;
	}
}

void solve(int x, int *cnt) {
	int len = 0;
	while (x) num[++len] = x % 10, x /= 10;
	for (int i = len; i >= 1; i--) {
		for (int j = 0; j <= 9; j++) cnt[j] += dp[i - 1] * num[i];
		for (int j = 0; j < num[i]; j++) cnt[j] += ten[i - 1];	// 特判: 最高位比 num[i]小的数
		int num2 = 0;
		for (int j = i - 1; j >= 1; j--) num2 = num2 * 10 + num[j];
		cnt[num[i]] += num2 + 1;	// 特判: 最高位数字
		cnt[0] -= ten[i - 1];	// 特判: 前导0
	}
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> a >> b;
	init();
	solve(a - 1, cnta); solve(b, cntb);
	for (int i = 0; i <= 9; i++) cout << cntb[i] - cnta[i] << " ";
	cout << endl;
	return 0;
}
2024/10/22 14:58
加载中...