[CP / Codeforces] C. Vlad and a Sum of Sum of Digits

C. Vlad and a Sum of Sum of Digits

分析

在给定的数据规模下,可以直接暴力计算出每个数的数位之和,求出前缀和后就可以在 O(1) 的时间复杂度下返回答案,因为数位拆分的时间复杂度为 O(nlogn),所以总的时间复杂度为 O(nlogn+t),其中 t 为查询次数。

事实上,并没有必要暴力计算出所有的数位之和,举个例子:

123=12×10+3

对应

6=3+3

假设我们将 k 的数位之和存放在数组 dp[k] 中,根据上面的例子,可以得到递推式

dp[k]=dp[k/10]+k mod 10

这样一来就能将 O(nlogn) 优化成 O(n)

代码(O(n+t))

#define N 200005
int pre[N];
void preprocess() {
std::vector<int> dp(N);
for (int i = 1; i < N; i++) {
dp[i] = dp[i / 10] + i % 10;
pre[i] = pre[i - 1] + dp[i];
}
}
void solve() {
int n;
std::cin >> n;
std::cout << pre[n] << '\n';
}
posted @   ZXPrism  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示