做题记录 25.3.23

\(\textcolor{blue}\odot\) CF1973E Cat, Fox and Swaps

先特判排列有序的情况

\(U=\{i\mid i\ne p_i\}\),此时显然 \(U\ne\mathbb\emptyset\)

\(|U|=1\),则可以取 \(l=r=i+p_i(i\ne p_i)\),其他情况下 \(l<r\)

考虑计算合法的 \((l,r)\;(l<r)\) 的数量

\(L=\min U\)\(R=\max U\),则 \((l,r)\) 合法的必要条件为 \(1\le l\le L+n,R+1\le r\le n,l<r\)

实际上也是充分条件,证明

因此直接计算 \(|\{(l,r)\mid l<r,1\le l\le L+n,R+1\le r\le n\}|\) 即可

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

代码

参考

\(\textcolor{purple}\odot\) CF1973D Cat, Fox and Maximum Array Split

先用 \(n\) 次询问确定 \(a\) 的最大值 \(M\)(若 \(\text{qry}(1,kn)=n\),则 \(M=k\)),则 \(M\mid m\),枚举 \(m=tM\;(1\le t\le \frac nk)\),每个 \(t\)\(k\) 次询问判断是否合法

总询问次数不超过 \(n+k\lfloor\frac nk\rfloor\le 2n\)

代码

参考

\(\textcolor{purple}\odot\) CF1970G3 Min-Fund Prison (Hard)

显然增加的边数的最小值为连通块数量减一,因此问题转化为求 \(x^2+y^2\) 的最小值

显然一部分连通块和至多一个连通块的一部分会划分到 \(x\) 中,剩余划分到 \(y\)

对于每个连通块 \(S\),计算出集合 \(P(S)\) 表示在连通块中选择一条割边,其中一边可能的大小,令 \(sz(S)\) 表示 \(S\) 的点数

枚举每个连通块,维护 \(F_{0\sim n}\)\(G_{0\sim n}\)\(F_i\) 表示是否可以选出若干完整连通块使得大小总和为 \(i\)\(G_i\) 表示目前枚举过的选择的连通块中是否可以选择若干个完整连通块和一个连通块的一部分使得大小总和为 \(i\)

初始 \(F_0=G_0=1\),每加入一个连通块 \(S\),令 \(F\gets F<<sz(S)\)(将 \(F\)\(G\) 存为 bitset),对于任意 \(u\in P(S)\)\(G\gets G<<u\)

答案为 \(\min_{i|F_i=1\lor G_i=1}c(b-1)+i^2+(n-i)^2\),其中 \(b\) 为连通块数量

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

代码

参考

posted @ 2025-03-24 20:05  Hstry  阅读(4)  评论(0)    收藏  举报