做题记录 25.5.30
\(\textcolor{blue}\odot\) CF1809E Two Tanks
考虑把倒水放到数轴上,在 \(-a\) 和 \(b\) 处分别有一个点,有一条长为 \(w\) 的线段在两者之间滑动,保持原点在线段上,可表示所有两水箱中总水量为 \(w\) 的情况
对于总水量相同的情况一起考虑
题目中操作 \(i\) 相当于线段向右移动 \(v_i\) 的距离
用当前线段左端点相对 \(-a\) 的偏移量表示线段位置,则位置 \(p\) 表示两个水箱中水量分别为 \(a-p\) 和 \(w-a+p\) 的状态
对于总水量为 \(w\) 的情况,要满足要求,必须使得 \(p\in[L,R]=[\max(0,a-w),\min(a+b-w,a)]\),依次枚举所有操作,维护 \(l,r\) 表示目前为止要使前面过程中都满足要求,必须有目前的 \(p\in[l,r]\),则对于操作 \(i\),\([l,r]\gets [l+v_i,r+v_i]\cap[L,R]\)
令 \(S=\sum v_i\) 表示总偏移量
则最终的 \([l,r]\) 对应初始 \([l-S,r-S]\) 的范围
对于 \(L\le p<l-S\) 的情况,最终状态为 \(l\),对于 \(r-S\le p\le R\) 的情况,最终状态为 \(r\),对于 \(p=k-S\;(k\in[L,R])\) 的情况,最终状态为 \(k\)
总时间复杂度 \(O((a+b)n+ab)\)
\(\textcolor{blue}\odot\) CF1809F Traveling in Berland
最优情况下显然有到达一个 \(1\) 时油箱恰好为空,否则可以把非空的部分换成单价为 \(1\) 的,显然不劣
断环为链,从 \(i\to i+n\),设其中经过的 \(1\) 分别在 \(p_{1\sim k}\;(i<p_1<p_2<\cdots<p_k<i+n)\),令 \(F(u,v)\) 表示 \((u,v)\) 中没有 \(1\),到 \(u\) 时和到 \(v\) 时油箱都为空,最小的花费,则 \(i\to i+n\) 的最小花费为 \(F(i,p_1)+F(p_1,p_2)+\cdots+F(p_{k-1},p_k)+F(p_k,i+n)\)
对于 \(F(i,j)\),当 \(b_i=2\) 时显然 \(F(i,j)=2dis(i,j)\),否则若 \(dis(i,j)\le k\) 则 \(F(i,j)=dis(i,j)\),否则 \(F(i,j)=2dis(i,j)-k\)
使用倍增对于每个点 \(u\) 求出到达 \(u\) 之后第 \(2^k\) 个 \(1\) 的花费和到达的点
容易做到 \(O(n\log n)\)
\(\textcolor{purple}\odot\) CF1809G Prediction
相当于求有多少 \(a\) 的排列满足 \(\forall i>1,|p_i-\max_{j=1}^{i-1}p_j|>k\)
当 \(a_n-a_{n-1}\le k\) 时显然无解
令 \(p_i\) 为第一个 \(\ge a_i-k\) 的位置,则 \(a_i\) 能打败 \(a_{1\sim p_i-1}\)(显然对于有解的情况 \(p_n=n\))
令 \(dp_i\) 表示确定了 \(a_{1\sim p_i-1}\) 和 \(a_i\) 的相对位置,且 \(a_i\) 为前缀最大值的方案数
则答案为 \(dp_n\),边界条件为 \(dp_0=1\)
从 \(dp_j\) 转移到 \(dp_i\),显然需要满足 \(j<p_i\),此时在 \(a_{1\sim p_j-1}\) 和 \(a_j\) 的基础上,还需要填 \(\{a_{p_j\sim p_i-1}\}/\{a_j\}\) 和 \(a_i\),\(\{a_{p_j\sim p_i-1}\}/\{a_j\}\) 这 \(p_i-p_j-1\) 个数可以填在 \(\{p_j,p_j+1,\cdots,n\}/\{i,j\}\) 这 \(n-p_j-1\) 个位置中,方案数为 \(A_{n-p_j-1}^{p_i-p_j-1}\)
因此转移为
容易前缀和优化
时间复杂度 \(O(n\log n)\),用双指针优化计算 \(p\) 的过程可做到 \(O(n)\)
\(\textcolor{purple}\odot\) CF1814D Balancing Weapons
令 \(d_i\gets \frac{\text{lcm} f_i}{f_i}\) 显然为一组合法解,因此答案上限为 \(n\)
若答案小于 \(n\),则必然存在一个 \(d\) 没有修改,枚举之,则其他的 \(d_j\) 有三种选择(其他都不优):不变,变为 \(\lfloor\frac{d_if_i}{f_j}\rfloor\),变为 \(\lceil\frac{d_if_i}{f_j}\rceil\),总数为 \(O(n)\) 的,排序,双指针限制极差 \(\le k\),若范围内 \(1\sim n\) 都存在则用修改的数量跟新答案
时间复杂度 \(O(n^2\log n)\)

浙公网安备 33010602011771号