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 的约数不会很多,这个是跑不满的。

相关推荐
leobertlan1 小时前
痛苦系列 | DSP-03 跨越单位圆:Z变换与零极点分析
算法·程序员
蛋蛋的就会顺顺的1 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
开发小能手1232 小时前
答案daanC语言
数据结构·算法
Navigator_Z3 小时前
LeetCode //C - 1291. Sequential Digits
c语言·算法·leetcode
WL学习笔记4 小时前
C & C++ 内存管理
c++·c++内存管理
pride.li4 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
旺仔仔仔5 小时前
机器人项目实战(5):从单次抓取,到接收指令连续做事
算法
旺仔仔仔5 小时前
机器人项目实战(2):识别物体、提取点云,再到抓取姿态
算法
姜鱼问生5 小时前
密码明明一样,为什么 GPG 说“错的“?
后端·算法·架构
启观川6 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法