做题记录 25.6.30

\(\textcolor{purple}\odot\) CF1721F Matching Reduction

当匹配数为 \(0\) 时显然剩下的为最大独立集,因此前面最大匹配次操作中删去了最大独立集的补集中的点,其大小等于最大匹配,因此每次操作从补集中任取一点删去即可

显然补集中每个点唯一对应匹配中的一条边,因此容易维护两种询问的答案

时间复杂度 \(O(m\sqrt n+q+tn)\),其中 \(n=n_1+n_2\)\(t=3\)

代码

参考

\(\textcolor{purple}\odot\) CF1720E Misha and Paintings

\(m\) 为原本颜色数,当 \(k\ge m\) 时显然最优策略为每次选择一个 \(1\times 1\) 的子矩阵,满足它的颜色在整个矩阵中出现不止一次,将其替换为新的颜色,操作次数为 \(k-m\)

\(k<m\) 时,可证只要至多两次操作:

  • 选择子矩阵 \((1\sim l,1\sim l)\),将其替换为子矩阵之外存在的一种颜色,设操作后颜色数为 \(m'\),选择 \(m'\ge k\) 的最大的 \(l\),即若选择 \(l+1\) 则会令 \(m<k\)
  • 然后选择一个 \((l+1,l+1)\) 为右下角的子矩阵,边长每增加 \(1\)\(m'\) 至多减少 \(2\),因此一定存在一种边长使得 \(m'=k\)\(m'=k-1\),若 \(m'=k-1\) 则令当前选择的子矩阵内填充为新的颜色,否则填充为 \((1\sim l,1\sim l)\) 中选择的颜色

因此转化为判断能否在一次操作内完成

预处理每种颜色的出现范围 \((xl_c\sim xr_c,yl_c\sim yr_c)\)

枚举矩阵边长 \(1\le L\le n\)(特判 \(L=n\)),令 \(c_{i,j}\) 表示完全包含于子矩阵 \((i\sim i+L-1,j\sim j+L-1)\) 中的颜色数量,考虑每种颜色对 \(c\) 的影响为子矩阵加,容易 \(O(n^2)\) 处理出 \(c\)

若存在 \(c_{i,j}\) 使得 \(m-c_{i,j}\) 等于 \(k\)\(k-1\) 则可以一次操作解决

否则需要两次操作

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

代码

参考

\(\textcolor{blue}\odot\) CF1720D2 Xor-Subsequence (hard version)

\(f_i\) 表示以 \(i\) 结尾的最大长度,答案为 \(\max f_i\),则 \([a_x\oplus y<a_y\oplus x]f_y\to f_x\)

\(a_x\oplus y<a_y\oplus x\) 等价于存在 \(u\) 使得 \((a_x>>(u+1))=(a_y>>(u+1)),(a_x>>u\&1)=(y>>u\&1),(x>>u\&1)=1-(a_y>>u\&1)\)

在计算 \(f\) 的同时维护 \(mx_{u,v,0/1,0/1}\),表示目前已经计算出的 \(f\) 中,\((a_x>>(u+1))=v,(a_x>>u\&1)=0/1,(x>>u\&1)=0/1\)\(f_x\) 的最大值

直接保存 \(mx\) 空间无法接受,需要对第二维离散化

时间复杂度 \(O(\sum n\log n\log V)\),空间复杂度 \(O(n\log V)\),时间复杂度可做到 \(O(\sum n\log V)\)

代码

\(\textcolor{blue}\odot\) CF1718C Tonya and Burenka-179

相当于求 $\max_{(s,k)} \gcd(k,n)\sum_{i\mid i\equiv s\pmod{\gcd(k,n)}}a_i $

\(f_{x,y}=x\sum_{i\mid i\equiv y\pmod x}a_i\),则答案为 \(\max_{x,y}f_{x,y}\)

显然只需要保存 \(x\mid n\)\(f_{x,y}\),用 multiset 保存 \(\{f_{x,\ast}\}\) 时间复杂度为 \(O((n+q)d(n)\log n)\),无法通过

发现最优情况下一定有 \(\frac nx\) 为质数,因此只需要保存 $\omega(n) $ 个 multiset

时间复杂度 \(O((n+q)\omega(n)\log n)\)

代码

参考

\(\textcolor{purple}\odot\) CF1717F Madoka and The First Session

\(c_i=\frac{b_i+d_i}2\),其中 \(d_i\) 为点 \(i\) 的度数,则每次操作相当于 \(c_u\gets c_u+1\)\(c_v\gets c_v+1\),最终要使 \(c_i=\frac{a_i+d_i}2\)

建立二分图,\(m\) 个左部点表示每条边,\(n\) 个右部点表示每个点

\(S\to L(i)\),流量为 \([1,1]\)

\(L(i)\to R(u_i),L(i)\to R(v_i)\),流量都是 \([0,1]\)

\(R(i)\to T\),若 \(s_i\) 则流量为 \([\frac{a_i+d_i}2,\frac{a_i+d_i}2]\)(若不是整数则无解),否则流量为 \([0,+\infty)\)

构造方案是容易的

时间复杂度 \(O(m\sqrt{n+m})\)

代码

\(\textcolor{purple}\odot\) CF1716F Bags with Balls

\(x=\lceil\frac m2\rceil,y=\lfloor\frac m2\rfloor\),答案为

\[\begin{aligned} &\sum_{i=0}^n i^k \binom ni x^i y^{n-i}\\ =&\sum_{i=0}^n \binom ni x^i y^{n-i} \sum_{j=0}^k \binom ij j!\begin{Bmatrix}k\\j\end{Bmatrix} \\ =&\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix} \sum_{i=0}^n \binom ni\binom ij j!x^i y^{n-i}\\ =&\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix} \sum_{i=0}^n \frac{n!}{i!(n-i)!}\frac{i!}{j!(i-j)!}j!x^i y^{n-i}\\ =&\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix} \sum_{i=0}^n \frac{n!}{(n-i)!(i-j)!} x^i y^{n-i}\\ =&\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix}\frac{n!}{(n-j)!} \sum_{i=0}^n \frac{(n-j)!}{(n-i)!(i-j)!} x^i y^{n-i}\\ =&\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix}\frac{n!}{(n-j)!} \sum_{i=0}^n \binom{n-j}{n-i} x^i y^{n-i}\\ =&\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix}\frac{n!}{(n-j)!} \sum_{i=0}^{n-j} \binom{n-j}i x^{n-i} y^i\\ =&\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix}\frac{n!}{(n-j)!}x^j \sum_{i=0}^{n-j} \binom{n-j}i x^{n-j-i} y^i\\ =&\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix}\frac{n!}{(n-j)!}x^j \sum_{i=0}^{n-j}(x+y)^{n-j} \\ =&\sum_{j=0}^k\begin{Bmatrix}k\\j\end{Bmatrix}n^{\underline{j}}x^j m^{n-j} \\ \end{aligned} \]

直接计算时间复杂度 \(O(k^2+\sum k\log n)\),容易优化到 \(O(k^2+\sum k)\)

代码

参考

\(\textcolor{purple}\odot\) CF1716E Swap and Maximum Block

建立线段树,对于一个长为 \(2^k\) 的区间,保存一个长为 \(2^k\) 的数组,其中 \(s\;(s\in[0,2^k))\) 位置保存了当前区间中翻转的位的状态为 \(s\) 的情况下的最大子段和信息,容易 \(O(n2^n)\) 求出所有信息,由此可 \(O(1)\) 回答询问

时间复杂度 \(O(n2^n+q)\),空间复杂度可做到 \(O(2^n)\)

代码

\(\textcolor{purple}\odot\) CF1715F Crop Squares

构造图形为三角形 \((x,0)-(x,m)-(x+1,m)\mid x \in\mathbb N\) 的并(直接构造出的图形相邻三角形顶点处只有一点相连,需要增加一个偏移量以使图形无自交),则答案的 \(y\) 和询问得到的答案一一对应,同理可以得到 \(x\)

询问次数为 \(2\),需要注意一些细节

代码

参考

posted @ 2025-07-01 20:41  Hstry  阅读(5)  评论(0)    收藏  举报