CF1809E Two Tanks

题目描述

有两个水箱,第一个水箱最大可容纳 $a$ 升水,第二个水箱最大可容纳 $b$ 升水。最初,第一个水箱中有 $c$ 升水($0 \le c \le a$),第二个水箱中有 $d$ 升水($0 \le d \le b$)。 你需要对这两个水箱进行 $n$ 次操作。第 $i$ 次操作由一个非零整数 $v_i$ 指定。如果 $v_i > 0$,你尝试将 $v_i$ 升水从第一个水箱倒入第二个水箱。如果 $v_i < 0$,你尝试将 $-v_i$ 升水从第二个水箱倒入第一个水箱。 当你尝试将 $x$ 升水从当前有 $y$ 升水的水箱倒入另一个最多还能容纳 $z$ 升水的水箱时,实际上只能移动 $\min(x, y, z)$ 升水。 对于所有满足 $0 \le c \le a$ 且 $0 \le d \le b$ 的初始水量 $(c, d)$,请计算在所有操作完成后,第一个水箱中的水量。

输入格式

第一行包含三个整数 $n, a, b$($1 \le n \le 10^4$;$1 \le a, b \le 1000$),分别表示操作次数和两个水箱的容量。 第二行包含 $n$ 个整数 $v_1, v_2, \dots, v_n$($-1000 \le v_i \le 1000$;$v_i \neq 0$),表示每次操作尝试倒入的水量。

输出格式

对于所有满足 $0 \le c \le a$ 且 $0 \le d \le b$ 的初始水量 $(c, d)$,输出在所有操作完成后第一个水箱中的水量。 输出共 $a+1$ 行,每行包含 $b+1$ 个整数。第 $i$ 行的第 $j$ 个值表示 $c = i - 1$ 且 $d = j - 1$ 时的答案。

说明/提示

以第一个样例中的 $c = 3$,$d = 2$ 为例: - 第一次操作尝试将 $2$ 升水从第二个水箱倒入第一个水箱,第二个水箱有 $2$ 升水,第一个水箱还能容纳 $1$ 升水。因此,实际移动 $\min(2, 2, 1) = 1$ 升水,操作后第一个水箱有 $4$ 升水,第二个水箱有 $1$ 升水。 - 第二次操作尝试将 $1$ 升水从第一个水箱倒入第二个水箱。$\min(1, 4, 3) = 1$ 升水被移动,操作后第一个水箱有 $3$ 升水,第二个水箱有 $2$ 升水。 - 第三次操作尝试将 $2$ 升水从第一个水箱倒入第二个水箱。$\min(2, 3, 2) = 2$ 升水被移动,操作后第一个水箱有 $1$ 升水,第二个水箱有 $4$ 升水。 最终第一个水箱中剩余 $1$ 升水。因此,第四行第三个值为 $1$。 由 ChatGPT 4.1 翻译