QOJ.ac

QOJ

Time Limit: 1.5 s Memory Limit: 1024 MB Total points: 100

#13912. 池塘

Statistics

乌龟 Syrup 经常在他家旁边的一个池塘里游泳。这个池塘是在很久以前由冰川运动雕刻而成,狭长而笔直——形状几乎像一条河流,但水面平静安稳,足以让乌龟可以不受阻碍地向两个方向游动。

今天,Syrup 像往常一样待在池塘里时,瞥见了可怕的绿色小点——正在绽放的藻类孢子。经过一阵暴雨后,富含营养的土壤被冲刷进池塘,逐渐分解,为原本无害的本地藻类提供了养分,使其以极快的速度生长。如果放任不管,这些藻华可能会扩散到遮挡阳光,使其无法到达湖底的植物,从而引发生态失衡,使水体在数月内都受到破坏。

幸运的是,Syrup 对此并不陌生,并且有一个简单而有效的解决办法——把它们吃掉。他已经在这个线性的池塘中识别出 $N$ 个土壤径流点,藻类正从这些位置开始生长,可以从一端到另一端编号为 $1$ 到 $N$。第 $i$ 个点和第 $(i+1)$ 个点之间的距离为 $D_i$ 米,而 Syrup 当前位于第 $K$ 个位置,正好在他最先注意到的孢子旁边。他会先吞掉那个孢子,然后以每秒 $1$ 米的速度向两个方向中的一个游去,吃掉他经过的每一簇藻类,直到所有藻华都被清除。

每个径流点一开始有 $0$ 根藻丝,并且在 Syrup 到达之前,每秒会增加 $1$ 根藻丝。乌龟非常强壮,Syrup 吃下任意数量的藻丝都没有困难。然而,由于过度生长的藻类味道很差,他希望尽量减少在整个行程中吃掉的藻丝总数。你的任务是,在他选择最优路线的前提下,计算 Syrup 为清除池塘中所有藻类所必须吃掉的最少藻丝总数。

输入格式

你的程序必须从标准输入中读取数据。

第一行包含两个整数 $N$ 和 $K$。

第二行包含 $N-1$ 个整数,第 $i$ 个整数表示第 $i$ 个径流点与第 $i+1$ 个径流点之间的距离 $D_i$(单位:米)。

输出格式

你的程序必须向标准输出中写入结果。

输出应包含一行一个整数,表示 Syrup 为清除池塘中所有藻类所必须吃掉的最少藻丝总数。

实现细节

由于子任务 3、4、5、6 和 7 的输入规模可能非常大,建议使用带有快速输入例程的 C++ 来解决本题。科学委员会并未提供可以完全解决本题的 Java 或 Python 解法。

附件中提供了包含快速输入/输出模板的 C++ 和 Java 源代码文件,强烈建议使用这些模板。

如果你使用 Java 实现,请将文件命名为 Pond.java,并将主函数放在 Pond 类中。

子任务

每个测试点的最大运行时间为 1.5 秒,最大内存使用量为 1GiB。对于所有测试用例,输入均满足以下限制:

  • $2 \le N \le 3 \times 10^5$
  • $1 \le K \le N$
  • $1 \le D_i \le 10^6$

你的程序将会在满足以下附加条件的测试数据上进行评测:

子任务 分值 附加限制
1 7 $N \le 100$
2 11 $N \le 2000$
3 10 $1 \le K \le \min(N, 20)$
4 6 $D_i = 1$
5 12 $1 \le K \le \min(N, 2000)$,且对所有 $i \equiv 0 \pmod{100}$,有 $D_i \ge D_{i+1}$
6 25 $1 \le K \le \min(N, 2000)$
7 29

样例数据

样例 1

该样例适用于子任务 1、2、3、6 和 7。

输入

7 3
5 2 4 2 2 5

输出

86

说明

最优路线是按顺序游经点 $3 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 6 \rightarrow 7 \rightarrow 1$,共吃掉 $0 + 2 + 8 + 10 + 12 + 17 + 37 = 86$ 根藻丝。

样例 2

该样例适用于子任务 1、2、3、6 和 7。

输入

9 5
4 3 2 1 1 3 6 10

输出

129

说明

最优路线是按顺序游经点 $5 \rightarrow 6 \rightarrow 4 \rightarrow 3 \rightarrow 2 \rightarrow 1 \rightarrow 7 \rightarrow 8 \rightarrow 9$, 共吃掉 $0 + 1 + 3 + 5 + 8 + 12 + 26 + 32 + 42 = 129$ 根藻丝。

样例 3

该样例适用于所有子任务。

输入

6 4
1 1 1 1 1

输出

21

`

说明

一种最优路线是按顺序游经点 $4 \rightarrow 3 \rightarrow 2 \rightarrow 1 \rightarrow 5 \rightarrow 6$,共吃掉 $0 + 1 + 2 + 3 + 7 + 8 = 21$ 根藻丝。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.