1 条题解
-
1
给定一个长度为 的正整数数组,请您求出有多少个非空子数组满足:该非空子数组的正整数之和能被出现在该非空子数组中的最大数字。
。
标签:前缀和。
枚举数字 从 到 (显然数字 不可能成为最大数字)。将问题转化为计算满足正整数之和能被 整除并且最大数字是 的非空子数组的数量。
下面先考虑如何计算满足正整数之和能被 整除的子数组数量。求出在模 意义下的前缀和数组 ,非空子数组 能被 整除的充要条件是 。扫描整个数组并用一个计数数组即可计算数量。
下面考虑加上限制“最大数字是 ”。 从 到 扫描整个数组 ,并维护在模 意义下的前缀和 、大小为 的计数数组 和用于暂时储存数值的容器 ,最初把 存入 。
如果 的最大数字小于 ,那么首先把 加入答案,然后把 存入 。
如果 的最大数字等于 ,那么首先拿出 里的所有数值并把它们加入 ,然后把 加入答案,之后把 存入 。
如果 的最大数字小于 ,那么首先清空 和 ,然后把 存入 。
时空复杂度:,含有常数 。
信息
- ID
- 601
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- 递交数
- 17
- 已通过
- 3
- 上传者