这两个代码有什么区别?一个AC一个30pts
查看原帖
这两个代码有什么区别?一个AC一个30pts
1053112
LinearXeno楼主2024/10/27 21:39

不同处用114514标记了 AC代码:

#include<bits/stdc++.h>
using namespace std;
#define N 12
long long a,b,cnta[20],cntb[20],ten[20],dp[20],num[20],len;
void init() {
	ten[0] = 1;//////
	for (int i = 1;i <= N;i ++) {
		ten[i] = 10 * ten[i - 1];
		dp[i] = i * ten[i - 1];
	}
	return;
}
void solve(long long x,long long *cnt) {
	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] += num[i] * dp[i - 1];
		for (int j = 0;j < num[i];j ++)//-----------114514
			cnt[j] += ten[i - 1];
		/*long long tmp = 0;
		for (int j = i - 1;j >= 1;j --)
			tmp = tmp * 10 + num[j];
		cnt[num[i]] += tmp + 1;*/
		for (int j = 1;j < i;j ++)
			cnt[num[i]] += num[j] * ten[j - 1];
		++ cnt[num[i]];
		cnt[0] -= ten[i - 1];//--------114514
	}
	return;
}
int main() {
	scanf("%lld%lld",&a,&b);
	init();
	solve(a - 1,cnta);
	solve(b,cntb);
	for (int i = 0;i <= 9;i ++)
		printf("%lld ",cntb[i] - cnta[i]);
	printf("\n");
	return 0;
}

30pts代码:

#include<bits/stdc++.h>
using namespace std;
#define N 12
long long a,b,cnta[20],cntb[20],ten[20],dp[20],num[20],len;
void init() {
	ten[0] = 1;//////
	for (int i = 1;i <= N;i ++) {
		ten[i] = 10 * ten[i - 1];
		dp[i] = i * ten[i - 1];
	}
	return;
}
void solve(long long x,long long *cnt) {
	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] += num[i] * dp[i - 1];
		for (int j = 1;j < num[i];j ++)//---------114514
			cnt[j] += ten[i - 1];
		/*long long tmp = 0;
		for (int j = i - 1;j >= 1;j --)
			tmp = tmp * 10 + num[j];
		cnt[num[i]] += tmp + 1;*/
		for (int j = 1;j < i;j ++)
			cnt[num[i]] += num[j] * ten[j - 1];
		++ cnt[num[i]];
	}
	return;
}
int main() {
	scanf("%lld%lld",&a,&b);
	init();
	solve(a - 1,cnta);
	solve(b,cntb);
	for (int i = 0;i <= 9;i ++)
		printf("%lld ",cntb[i] - cnta[i]);
	printf("\n");
	return 0;
}

2024/10/27 21:39
加载中...