AT_pakencamp_2020_day1_k Gcd of Sum题解

Link

我们可以发现几个简单的小性质:

  1. 最终的答案一定是 ∑ i = 1 N A i \sum_{i=1}^{N} A_i ∑i=1NAi 的约数。
  2. 假设最后的答案是 g g g,我们先对 A A A 做一下前缀和 s s s,由于答案要划分成若干连续子序列,所以一定存在若干个 i i i 使得 g ∣ s i g|s_i g∣si,这些位置都是可以作为划分点的。显然,如果存在 k k k 个划分点,则我们可以将序列划分至多 k + 1 k+1 k+1 份,少于 k + 1 k+1 k+1 份也一定是可以划分出来的。

于是我们枚举 ∑ i = 1 N A i \sum_{i=1}^{N} A_i ∑i=1NAi 的约数 g g g,对于每个约数扫一遍序列求出划分点的数量 k k k,对于 1 1 1 到 k k k 的答案全部对 g g g 取 max ⁡ \max max 即可。

时间复杂度 O ( M N ) O(\sqrt{M} N) O(M N),其中 M = ∑ i = 1 N A i M=\sum_{i=1}^{N} A_i M=∑i=1NAi。不过显然 M M M 的约数不会很多,这个是跑不满的。

相关推荐
2601_956121971 小时前
map_计蒜客T1271 完美K倍子数组
c++·算法
编程圈子2 小时前
电机驱动开发学习19. 霍尔 BLDC 三段式 FOC 启动算法
驱动开发·学习·算法
Hello_Damon_Nikola2 小时前
伺服电机堵转检测算法详解
单片机·嵌入式硬件·算法
罗小罗同学2 小时前
安德森癌症中心发表SCOPE IO模型,实现了对罕见肿瘤帕博利珠单抗疗效的精准预测,在患者早期即可预判药效
人工智能·算法·医学图像处理·医学ai
王维同学2 小时前
IFEO Debugger、VerifierDlls 与 SilentProcessExit 配置
c++·windows·安全·注册表
变量未定义~3 小时前
Tarjan算法-强连通分量、路径、出差
算法
geovindu3 小时前
CSharp: Iterative Algorithms
开发语言·后端·算法·c#·.net·迭代算法
小保CPP3 小时前
OpenCV C++计算多边形的最大内切圆
c++·人工智能·opencv·计算机视觉
道影子3 小时前
《黄帝内经》021章|津凝精晶 沉降为患
人工智能·深度学习·神经网络·算法·机器学习