P13405 [GCJ 2010 #3] Hot Dog Proliferation
题目描述
有若干热狗摊贩在一条很长的东西向街道的各个路口(交叉口)上卖热狗。问题在于,可能有多个摊贩在同一个路口,这样他们就会互相抢生意。不过事情还有转机!热狗摊贩们有一个计划。
如果某个路口上有两个或更多摊贩,那么恰好有两位摊贩可以进行一次移动,具体如下:
- 一位摊贩向东移动到下一个路口。
- 另一位摊贩向西移动到下一个路口。
请注意,这条街道非常长,所以不用担心会没有路口可去。给定所有热狗摊贩的初始位置,请你计算,最少需要多少次移动,才能让所有摊贩都分开(即每个摊贩都在不同的路口)。
例如,假设街道上各个路口的热狗摊贩数量从西到东依次如下:
```
... 0 0 2 1 2 0 0 ...
```
那么摊贩们可以通过三次移动分开,如下所示:
```
... 0 0 2 1 2 0 0 ...
|
+--- 在这里进行一次移动
... 0 1 0 2 2 0 0 ...
|
+--- 在这里进行一次移动
... 0 1 1 0 3 0 0 ...
|
+--- 在这里进行一次移动
... 0 1 1 1 1 1 0 ...
```
输入格式
每个路口用一个整数标号,可以为正也可以为负。对于每个 $i$,路口 $i+1$ 表示比路口 $i$ 更靠东的下一个路口。我们将使用这种标号方式来描述输入文件中的路口。
输入文件的第一行包含测试用例数 $T$。接下来有 $T$ 组测试数据。每组测试数据的第一行包含一个整数 $C$,表示初始状态下至少有一个热狗摊贩的路口数量。接下来的 $C$ 行,每行包含两个用空格分隔的整数 $P$ 和 $V$,表示在路口 $P$ 上有 $V$ 个摊贩。
输出格式
对于每组测试数据,输出一行,格式为 "Case #$x$: $M$",其中 $x$ 是测试用例编号(从 1 开始),$M$ 是将所有摊贩分开所需的最小移动次数。
说明/提示
**数据范围**
- $1 \leq T \leq 50$。
- $1 \leq C \leq 200$。
- 所有 $P$ 的取值范围为 $[-1000000, 1000000]$。
- 每组测试数据中,所有 $P$ 互不相同,并且按递增顺序给出。
- 所有 $V$ 都为正整数。所有 $V$ 的和的限制见下文。
- 总是可以在有限步内将所有摊贩分开。
**小数据范围(6 分,测试集 1 - 可见)**
- 每组测试数据中热狗摊贩总数不超过 200。
**大数据范围(22 分,测试集 2 - 隐藏)**
- 每组测试数据中热狗摊贩总数不超过 100000。
由 ChatGPT 4.1 翻译