做题记录 25.4.30
\(\textcolor{blue}\odot\) CF1886E I Wanna be the Team Leader
将 \(a\) 从大到小排序后,显然每个 \(b\) 对应一个区间最优
令 \(dp_S\) 表示最小的 \(i\) 使得可以把 \(a\) 的区间 \([1,i]\) 划分到 \(b\) 的子集 \(S\) 中,则答案为 \(dp_{\{1,2,\cdots,m\}}\)
令 \(g_{i,l}\) 表示要包含 \(b_i\),区间左端点为 \(l\),最小的右端点,容易双指针预处理
则 \(dp\) 的值容易由 \(g\) 得到
时间复杂度 \(O(n\log n+nm+m2^m)\)
\(\textcolor{purple}\odot\) CF1884E Hard Design
先断环为链,转化为求出 \([0,n),[1,n+1),\cdots\) 的答案,令 \(v=\max_{i=0}^{n-1} a_i\)
第一问为经典题目,\([l,r]\) 的答案为 \(\sum_{i=l+1}^r \max(0,a_i-a_{i-1})+v-a_r\),容易 \(O(n)\) 求出所有答案
对于第二问,将 \([l,r]\) 从 \(v\) 的位置处拆开,则转化为两个求前缀的总价值的问题,容易栈解决,时间复杂度 \(O(n)\)
总时间复杂度 \(O(\sum n)\)
\(\textcolor{blue}\odot\) CF1882E1 Two Permutations (Easy Version)
先分开考虑两个序列,之后再尝试令两者操作次数相同
对于一个序列,设其为 \(AaBbC\),其中 \(A,B,C\) 为子段,\(a,b\) 为两个位置,依次操作 \(a,b,a\) 则可交换 \(a,b\)
使一个序列有序的最少交换次数不超过 \(n-1\),因此可以 \(3\max(m,n)-3\) 次操作令两个序列都有序
若两个操作序列的长度奇偶性相同,则在第一个序列后补 \(1,n\) 或在第二个后补 \(1,m\) 即可
若奇偶性不同,则可证 \(n,m\) 之中至少有一个为奇数时才有解,若 \(n\) 为奇数则在第一个序列后补 \(n\) 个 \(n\),否则在第二个序列后补 \(m\) 个 \(m\)
总操作次数不超过 \(3\max(n,m)-3+\max(n,m)=4\max(n,m)-3\) 可过
\(\textcolor{blue}\odot\) CF1878G wxhtzdy ORO Tree
把链上的 \(z\) 按 \(\text{popcount(f(x,z))}\) 划分为 \(O(\log V)\) 个连续段,为了实现方便,树剖时的重链之间的分界点处也断开,总计 \(O(\log V+\log n)\) 段,每段取左端点跟新答案
使用 \(\text{ST}\) 表维护区间按位或和,时间复杂度 \(O(q(\log V+\log n)\log n)\)
\(\textcolor{purple}\odot\) CF1879F Last Man Standing
枚举 \(x\),转化为求 \(h_i\lceil\frac{a_i}x\rceil\) 的最大值位置和次大值
将 \(a_i\) 从小到大排序,枚举 \(\lceil\frac{a_i}x\rceil\),则合法的 \(a_i\) 为一个区间,显然区间中只有 \(h_i\) 的最大值和次大值有用,容易用 \(\text{ST}\) 表每次 \(O(1)\) 求出
总时间复杂度 \(O(\sum (n\log n+ V\ln V))\)
\(\textcolor{purple}\odot\) CF1874D Jellyfish and Miku
假如确定了 \(a\),考虑计算其期望
令 \(f_i\) 表示 \(i\) 到 \(n\) 的期望步数,则 \(f_n=0\),\(f_0=f_1+1\),转移为
可化为
令 \(g_i=f_{i-1}-f_i\),则有
可得
因此
而
由于答案为 \(f_0\) 要最小,因此需要最小化 \(\sum_{i=1}^n \frac{\sum_{j=1}^{i-1} a_j}{a_i}\)
令 \(dp_{i,s}\) 表示 \(a_{1\sim i}\) 的和为 \(s\) 时该式子的最小值,则 \(dp_{0,0}=0\),答案为 \(n+2dp_{n,m}\)(当总和不足 \(m\) 时把剩余的补到 \(a_n\) 上一定不劣,因此总和取到 \(m\) 一定不劣),转移为
直接做为 \(O(nm^2)\) 的
发现 \(a\) 单调不降一定不劣,因此对于一个 \(dp_{i,j}\) 只需要转移满足 \(k\ge 1\) 且 \(j+k(n-i)\le m\) 的 \(k\) 即可,这样时间复杂度为 \(O(\sum_{i=1}^n \sum_{j=1}^m \frac{m}i)=O(m^2\ln n)\)

浙公网安备 33010602011771号