做题记录 25.6.13

\(\textcolor{blue}\odot\) CF1764E Doremy's Number Line

显然 \(a_1\ge k\) 时合法,\(n=1,a_1>k\)\(a_1+b_1<k\) 时不合法

否则考虑从 \((a_2,b_2),(a_3,b_3),\cdots,(a_n,b_n)\) 中选出一个子集并重排,得到一个尽量大的数,其后放置 \((a_1,b_1)\),则之前得到的数 \(\ge k-b_1\) 时合法,若无法做到则不合法

问题转化为求从 \((a_2,b_2),(a_3,b_3),\cdots,(a_n,b_n)\) 中选出一个子集并重排得到的最大值

设重排后为 \((a'_1,b'_1),(a'_2,b'_2),\cdots,(a'_x,b'_x)\),则值为 \(\min(\min(\min(a'_1,a'_2)+b'_2,a'_3)+b'_3,a'_4)+b'_4\cdots\)

除了 \((a'_1,b'_1)\) 外,显然按 \(a'\) 升序重排不劣

考虑把 \((a_2,b_2),(a_3,b_3),\cdots,(a_n,b_n)\)\(a\) 升序重排,令 \(f_i\) 表示只选择 \((a_2,b_2)\sim (a_i,b_i)\) 的子集所能得到的最大值

显然 \(f_1=-\infty\)

若选择 \((a_i,b_i)\) 为重排后的第一个,则 \((a_2,b_2),(a_3,b_3),\cdots,(a_{i-1},b_{i-1})\) 的贡献为 \(\max_{j=2}^{i-1}(a_j+b_j)\)(只保留这一组即可,增加其他的答案不升),在枚举时记录前缀最大值即可,令值为 \(pm\)

因此取 \((a_i,b_i)\) 为第一个时,前缀所能表示出的最大值为 \(\max(pm,a_i)\)

若取 \((a_j,b_j)\;(j<i)\) 为第一个,则表示出的最大值为 \(\min(f_{i-1},a_i)+b_i\)

因此 \(f_i=\max(\max(pm,a_i),\min(f_{i-1},a_i)+b_i)\)

\(f_n\ge k-b_1\) 时有解,否则无解

时间复杂度 \(O(\sum n\log n)\),瓶颈在于排序

代码

参考

\(\textcolor{purple}\odot\) CF1762F Good Pairs

区间 \([l,r]\) 是好的当且仅当 \(l\)\(r\) 之间存在一条路径满足路径上相邻两点点权相差不超过 \(k\),当存在 \(a_x<a_y>a_z\)\(x\) 可以直接到 \(z\),因此若存在路径则一定可以找到单调不降或单调不升的路径

考虑求出所有 \([l,r]\) 满足 \(a_l\le a_r\) 且区间合法,令 \(a_i\gets \max_j a_j-a_i+1\) 后再做一次就可以得到 \(a_l\le a_r\) 的答案,减去 \(a_l=a_r\) 的数量即可,而 \(a_l=a_r\) 的数量容易统计(显然 \(a_l=a_r\) 的区间都满足要求,因此贡献为 \(\sum_{s\in S}\frac{|s|(|s|+1)}2\),其中 \(S\) 为等价类集合)

\(a_l\le a_r\le a_l+k\) 时,\(a_l\) 可以直接到 \(a_r\)

否则令 \(p_l\)\(l\) 之后第一个 \(a_l\le a_x\le a_l+k\) 的位置 \(x\),则从 \(a_l\) 先到 \(a_{p_l}\) 一定不劣

发现当 \(a_l\le a_r\le a_{p_l}\) 时,通过两种方式都可到达 \(r\),将其纳入第二种,因此 \(a_l\) 可达的位置,等于 \(\{r\mid r\ge l,a_l\le a_r\le a_{p_l}\}\) 并上 \(a_{p_l}\) 可达的位置,且两部分没有交集

\(dp_l\) 为左端点为 \(l\) 的答案,则 \(dp_l=dp_{p_l}+|\{r\mid r\ge l,a_l\le a_r\le a_{p_l}\}|\),从大到小计算 \(l\),则后面一个集合的大小容易树状数组计算

总时间复杂度 \(O(\sum n\log n)\)

代码

参考

\(\textcolor{blue}\odot\) CF1761E Make It Connected

分类讨论

当图本身就连通时,显然操作次数为 \(0\)

若存在孤点,则操作该孤点即可,操作次数为 \(1\)

若存在一个连通块不是团,则选择这个连通块中度数最小的点操作,显然操作后该点和其他连通块都相连,原本连通块可能分裂为若干部分,可证选择的点在操作后和每个部分都相连,操作次数为 \(1\)

否则剩下连通块都是团,若数量 \(>2\),则任选两个不在同一连通块中的操作,操作第一个点后就转化为上一种状态,操作第二个点即可令全图连通,操作次数为 \(2\)

若剩下两个团,此时每选择一个点操作都相当于把它加入另一个团中,因此操作较小连通块中全体点即可

时间复杂度 \(O(\sum n^2)\)

代码

参考

\(\textcolor{purple}\odot\) CF1762E Tree Sum

显然 \(n\) 为奇数时无解,以下只考虑偶数的情况

当树的形态一定时,满足要求的填边权的方式有且仅有一种,从叶子向上填即可

\(f_i=i^{i-1}\) 表示大小为 \(i\) 的有根树数量

枚举产生贡献的边,设删去它后,\(1\) 所在连通块大小为 \(i\)\(n\) 所在的大小为 \(n\),则剩余 \(n-2\) 个点有 \(\binom{n-2}{i-1}\) 种方式,两侧建立树有 \(f_if_{n-i}\) 种方式,根据确定边权的方式可知删去的边边权为 \((-1)^i\)

答案为

\[\sum_{i=1}^{n-1}(-1)^i\binom{n-2}{i-1}f_if_{n-i} \]

时间复杂度 \(O(n)\)

代码

参考

\(\textcolor{purple}\odot\) CF1753D The Beach

一定存在每个可移动障碍至多移动一次的最优方案,分类讨论即可证明

因此考虑空地的移动:对于 \(\text{LR}\)\(\text{L}\) 左侧、上方、下方的空地可以移到 \(\text{R}\) 的位置,\(\text{R}\) 右侧、上方、下方的空地可以移到 \(\text L\) 的位置,\(\text{UD}\) 同理

每个位置建立一个点,上述移动分别连有向边,求出空地移到每个点的最短距离(多源最短路),令 \((x,y)\) 的距离为 \(d(x,y)\),则答案为 \(\min_{x,y} (d(x,y)+d(x+1,y),d(x,y)+d(x,y+1))\)

时间复杂度 \(O(nm\log nm)\)

代码

参考

\(\textcolor{blue}\odot\) CF1750E Bracket Cost

一个区间的答案为区间内没有匹配的左括号和右括号数量的较大值

证明:

  • 当未匹配的左括号较多时,依次枚举每个未匹配的左括号,若还有未匹配的右括号则把当前左括号旋转到它的左侧(使用一次操作),否则插入一个右括号(使用一次操作)
  • 显然结束后不存在未匹配括号
  • 右括号较多时同理

对于区间 \([l,r]\),令 \(L\) 为左括号数量,\(R\) 为右括号数量,\(M\) 为匹配的括号对数,则贡献为 \(\max(L-M,R-M)=\max(L,R)-M\)

由于 \(\max(L,R)=\frac12(L+R+|L-R|)=\frac12(r-l+1)+\frac12|L-R|\),前一项容易统计,对于后一项令左括号为 \(1\),右括号为 \(0\),则 \(|L-R|\) 相当于区间和的绝对值,令 \(s\) 为前缀和,则总贡献等于 \(\frac12\sum_{1\le l\le r\le n}|s_r-s_{l-1}|=\frac14\sum_{0\le l,r\le n}|s_r-s_l|\),排序后直接计算即可

对于 \(M\) 的部分,预处理出所有初始匹配的括号对 \((l,r)\),一组 \((l,r)\) 的贡献为 \(l(n-r+1)\)

时间复杂度 \(O(\sum n\log n)\),瓶颈在于排序

代码

参考

\(\textcolor{purple}\odot\) CF1750F Majority

\(f_{i,j}\) 表示长为 \(i\),第一个和最后一个位置为 \(1\),扩展到极大状态后最后一段 \(1\) 的长度为 \(j\) 的方案数

显然 \(f_{1,1}=1\),答案为 \(f_{n,n}\)

显然 \(f_{i,i}=2^{i-2}-\sum_{j<i} f_{i,j}\)(实际上 \(\frac{i-1}2<j<i\)\(f_{i,j}=0\),可以跳过)

对于 \(f_{i,j}\),考虑最后一段 \(j\)\(1\) 之前有 \(k\)\(0\),再之前的一段 \(1\) 长为 \(l\)(因为需要保证最终状态下任意一段极长的 \(0\) 要长于左右两段 \(1\) 的长度之和,即 \(j+l<k\)),转移为 \(f_{i,j}=f_{j,j}\sum_{k=j+2}^{i-j-1}\sum_{l=1}^{k-j-1}f_{i-j-k,l}\)

可化为 \(f_{i,j}=f_{j,j}\sum_{k=1}^{i-1}\sum_{l=1}^{i-k-2j-1}f_{k,l}\),在枚举 \(i\) 的过程中维护 \(s_k=\sum_{a+b=k}f_{a,b}\;(a<i)\),则 \(f_{i,j}=f_{j,j}\sum_{v=1}^{i-2j-1}s_v\),计算 \(s\) 的前缀和即可 \(O(1)\) 转移

时间复杂度 \(O(n^2)\)

代码

参考

\(\textcolor{purple}\odot\) CF1749E Cactus Wall

用左侧到右侧的一条路径刻画,路径上每个位置要么为 \(\text \#\),要么为可以放置的位置,\(0/1\) \(\text{bfs}\),队列即可

时间复杂度 \(O(\sum nm)\)

代码

参考

posted @ 2025-06-14 07:44  Hstry  阅读(2)  评论(0)    收藏  举报