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 翻译