noi.ac#2861
题意
给定长度为
思路
观察数据范围,发现算法大概率是
先对式子进行转化
第一项很好处理,考虑如何处理第二项
考虑固定
假如固定
假如固定
根号分治?仍然是根号级别的算法,甚至常数远大于整除分块。
诶,每个
那么如何处理呢?
解法
发现若是固定
这看似是一个没什么用的优化,但是实际上将算法优化到了
为什么捏?
因为总枚举次数是不多于
具体实现上可以对
代码
#include <bits/stdc++.h>
using namespace std;
int n, a[1000005], cnt[1000005], sum[1000005], max_a;
long long ans;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= n; i++)
max_a = max(a[i], max_a);
for (int i = 1; i <= n; i++)
cnt[a[i]]++;
for (int i = 1; i <= max_a; i++)
sum[i] = sum[i - 1] + cnt[i];
for (int i = 1; i <= max_a; i++) {
if (!cnt[i]) continue;
long long cc = 0;
for (int j = 1; j <= max_a / i; j++) {
cc += (sum[min(max_a, (j + 1) * i - 1)] - sum[j * i - 1]) * j;
}
ans += 1ll * cc * cnt[i] * i;
}
long long total_sum = 0;
for (int i = 1; i <= n; i++) {
total_sum += a[i];
}
total_sum *= n;
printf("%lld", total_sum - ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】