1 条题解
-
0
题解
思路
总水量 在所有操作中保持不变。固定 后,第一个水箱水量的合法区间为
一次正操作把当前水量 变为 ;一次负操作把它变为 。因此,所有操作的复合映射始终可以写成
做法
子任务 1
枚举全部 ,逐次模拟操作,复杂度 。
子任务 2
固定总水量后, 是“常数、斜率一、常数”的单调函数。用逐状态模拟作为查询,二分第一个大于左端答案的位置和第一个等于右端答案的位置,再线性填写这一条对角线。复杂度 。
满分算法
对每个总水量维护三元组 ,初始为 。若 :
$$q\leftarrow q-v_i,\quad L\leftarrow\max(L_0,L-v_i),\quad R\leftarrow\max(L_0,R-v_i).$$若 :
$$q\leftarrow q-v_i,\quad L\leftarrow\min(R_0,L-v_i),\quad R\leftarrow\min(R_0,R-v_i).$$处理完后,对该对角线每个初始 输出 。
另一种等价实现维护斜率为一的初始区间左右端点,并先模拟左端点最终值。
正确性证明
固定总水量时,水箱容量限制恰好等价于把第一个水箱水量限制在 。每次倒水是一次平移后向左端或右端截断。对夹逼线性函数再做平移与单侧截断,仍是夹逼线性函数,且上述转移直接给出了新参数。归纳可知最终三元组表示全部操作的精确复合映射,因此填写的每个矩阵元素都正确。
复杂度
满分算法对每个总水量扫描一次操作序列,再输出整个矩阵,时间复杂度 ,空间复杂度 。
- 1
信息
- ID
- 1373
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者