全世界就我不知道一个数各位数之和是3,这个数就是3的倍数。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 5;
char s[maxn];
ll cnt[3], now;
int main() {
scanf("%s", s + 1);
ll ans = 0;
cnt[0] = 1;
for (int i = 1; s[i]; ++i) {
ll cnt0 = 0;
while (s[i] == '0') {
++i, ++cnt0;
}
ans += (cnt0 + 1) * cnt0 / 2;
if (cnt0 >= 2) {
ans += (cnt[now] - 1) * (cnt0 - 1);
}
cnt[now] += cnt0;
now = (now + s[i] - '0') % 3;
++cnt[now];
}
printf("%lld\n", ans);
return 0;
}
本文介绍了一种高效算法,用于判断一个数是否为3的倍数,通过计算该数的各位数字之和来实现。代码使用C++编写,展示了如何通过预处理和动态规划减少计算复杂度。
564

被折叠的 条评论
为什么被折叠?



