#P13439. [GCJ 2009 #1C] Bribe the Prisoners
[GCJ 2009 #1C] Bribe the Prisoners
Description
在一个王国里,有一些牢房(编号为 到 ),这些牢房排成一条直线。编号为 和 的牢房是相邻的,相邻牢房中的囚犯被称为“邻居”。相邻牢房之间有一堵带窗户的墙,邻居们可以通过窗户进行交流。
所有囚犯本来相安无事,直到有囚犯被释放。当某个囚犯被释放时,他的邻居会得知这个消息,并且每个邻居会把这个消息传递给他的另一个邻居。如此传递下去,直到消息传到没有其他邻居的囚犯(即处在第 号牢房、第 号牢房,或其相邻牢房已空的囚犯)。每当某个囚犯得知有其他囚犯被释放时,除非他被贿赂一枚金币,否则他会愤怒地砸坏自己牢房里的所有东西。因此,当释放编号为 的囚犯时, 号牢房两侧的所有囚犯——从 向左直到第 号牢房、向右直到第 号牢房或遇到空牢房为止——都需要被贿赂。
假设每个牢房最初都正好关押着一名囚犯,并且每天只能释放一个囚犯。给定 个将要被释放的囚犯(共需 天),请你计算,如果可以任意选择释放顺序,最少需要多少金币用于贿赂。
注意,每一次贿赂只对当天有效。如果某个囚犯昨天被贿赂了,今天又听说有囚犯被释放,他还需要再次被贿赂。
Input Format
输入的第一行是测试用例数 。接下来有 组测试数据。每组数据包含两行。第一行为:
其中 是牢房的总数, 是需要释放的囚犯数。
接下来一行包含 个不同的牢房编号(要被释放的囚犯所在牢房),用空格分隔,按升序排列。
Output Format
对于每组测试数据,输出一行,格式如下:
Case #:
其中 是测试编号(从 开始), 是最少需要的金币数。
2
8 1
3
20 3
3 6 14
Case #1: 7
Case #2: 35
Hint
样例说明
在第二个样例中,假如你先释放 14 号牢房的囚犯,再释放 6 号,最后释放 3 号,所需金币数为 。如果你先释放 6 号,再释放 3 号,最后释放 14 号,所需金币数为 。
限制条件
- 每个牢房编号均为 到 之间的整数
小数据集
- 时间限制:2 秒
大数据集
- 时间限制:3 秒
翻译由 ChatGPT-4.1 完成。
京公网安备 11011102002149号