1 条题解
-
1egnarOteewS (caiyuhao) LV 1 MOD @ 2020-08-30 11:03:11
子段和 正解
Part -1 题目描述
Part 0 一些闲话
你:哇这个……三个\(\sum\)耶!!!\(\mathcal{O}(n^3)\)算法?不不不,\(n\leq10^5\)!!!但我只会\(\mathcal{O}(n^2)\)的前缀和优化!!!怎么办,怎么办……
然后你就点到了这里,~~一个 404 Page~~。
Part 1 题目剖析
算法 #1
时间复杂度:\(\mathcal{O}(n^3)\)
空间复杂度:\(\mathcal{O}(n)\)
期望得分:\(10\)pts
暴力枚举进行求和即可。
算法 #2
时间复杂度:\(\mathcal{O}(n^2)\)
空间复杂度:\(\mathcal{O}(n)\)
期望得分:\(30\)pts
观察此题公式。它的含义是:
给定一个序列\(a\),求它所有子序列中数的和之和。
~~好别扭啊!!!~~
于是我们直接前缀和优化,并暴力枚举左右两端点即可\(\mathcal{O}(n^2)\)求得答案。
算法 #3(正解 1)
时间复杂度:\(\mathcal{O}(3n)\)
空间复杂度:\(\mathcal{O}(2n)\)
期望得分:\(100\)pts
(至于时空间复杂度为什么加系数……为了更便于比较与算法 #4 的优劣)
先说结论吧。
为在算法 #2 的基础上得到的前缀和数组(命名为\(b\))进行一次后缀和操作,得到数组\(c\)。于是
\[\sum_{i=1}^{i\leq n}c_i-b_{i-1}\times(n-i+1)\]
即为答案。
此算法想出需要:
- 一张纸(~~废话~~)
- 更多纸(~~搞笑~~)
- 聪慧的脑子
- 没了
算法 #4(正解 2)
时间复杂度:\(\mathcal{O}(n)\)
空间复杂度:\(\mathcal{O}(1)\)
期望得分:\(100\)pts
(以上复杂度是真的没系数)
此算法想出需要:
- 普通的脑子
- 没了
同样先给出结论,答案为:
\[\sum_{i=1}^{i\leq n}a_i\times i\times(n-i+1)\]
很简单,画图啊!!!(以\(3\)号为例)
| | | +---+---+---+---+---+---+ | 1 | 2 | 3 | 4 | 5 | 6 | +---+---+---+---+---+---+ | | | <- 左端点
| | | | +---+---+---+---+---+---+ | 1 | 2 | 3 | 4 | 5 | 6 | +---+---+---+---+---+---+ 右端点 -> | | | |
每两个左右端点都可以组成一个包含\(3\)号的一段,即\(3\)号一共出现了\(3\times4=12\)(次)。设它是\(13\),则它对答案的贡献应该是\(13\times12=156\),\(\mathcal{O}(n)\)即可求得。
你还想要代码?嗯哼哼……
- 1
信息
- ID
- 1010
- 难度
- 4
- 分类
- (无)
- 标签
- (无)
- 递交数
- 3
- 已通过
- 1
- 通过率
- 33%
- 上传者