做题记录 25.4.8

\(\textcolor{purple}\odot\) CF1935F Andrey's Tree

先进行一次换根 \(dp\),对于每个 \(u\) 求出 \(S_u=\{(mn(S),mx(S))\mid S\in \text{SBT}(u)\}\),其中 \(\text{SBT}(u)\) 表示删除 \(u\) 后的各个子树(无根意义下的),\(mn(S)\)\(mx(S)\) 表示子树中结点编号的最小最大值

对于 \(u=1\)\(u=n\) 的情况,每个 \((mn,mx)\)\(mx\) 连接 \(mx+1\) 即可(若 \(mx=n\)\(mx+1=u\) 则不连),总代价和边数都是 \(|S_u|-1\)

否则令 \(L=\{mx<u\mid (mn,mx)\in S_u\}\)\(R=S_u/L\)

\(\forall (mn,mx)\in R,mn>u\),则 \(R\) 中每个 \((mn,mx)\)\(mx\) 连向 \(mx+1\)(若 \(mx=n\) 则不连),\(L\) 中每个 \((mn,mx)\)\(mx\) 连向 \(mx+1\)(若 \(mx=u-1\) 则连向 \(u+1\)),总代价 \(|S_u|\),边数 \(|S_u|-1\)

否则 \(L\) 中每个 \((mn,mx)\)\(mn\) 连向 \(mn-1\)(若 \(mn=1\) 则不连),\(R\) 中每个 \((mn,mx)\)\(mx\) 连向 \(mx+1\)(若 \(mx=n\) 则不连),令 \(t\)\(R\)\(mn\) 的最小值,若 \(t>1\)\(t\) 连向 \(t-1\),总代价和边数都是 \(|S_u|-1\)

显然都取到下界

时间复杂度可做到 \(O(\sum n)\)

代码

\(\textcolor{blue}\odot\) CF1933G Turtle Magic: Royal Turtle Shell Pattern

合法的网格必然为以下模式的平移或旋转:

\[\def \x{\square}\def\y{{\Large\circ}} \begin{matrix} \x\y\x\y\\ \x\y\x\y\\ \y\x\y\x\\ \y\x\y\x\\ \end{matrix} \]

总共 \(8\) 种本质不同的情况,分别判断一下目前为止是否合法即可

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

代码

\(\textcolor{blue}\odot\) CF1932G Moving Platforms

\(\text{dijkstra}\),转移时用 \(\text{exgcd}\) 求出步数即可

时间复杂度 \(O(m(\log n+\log V))\)

代码

\(\textcolor{blue}\odot\) CF1934D2 XOR Break — Game Version

可证 \(n\) 先手必胜当且仅当 \(\text{popcount}(n)\equiv 0\pmod 2\)

证明:

  • \(\text{popcount}(n)=1\) 时显然无法继续拆分,此时后手必胜
  • \(\text{popcount}(n)\equiv 1\pmod 2\) 时,设 \(p\oplus q=n\),则 \(p\)\(q\)\(\text{popcount}\) 必然一奇一偶,后手一定存在策略必胜,先手必败
  • \(\text{popcount}(n)\equiv 0\pmod 2\) 时,一定存在一种方式可以把 \(n\) 拆为 \(p\oplus q\) 使得 \(p\)\(q\)\(\text{popcount}\) 都是奇数,后手必败,先手必胜

还需要保证步数

考虑把 \(n\) 拆为 \(\text{lb}(n)\)\(n\oplus\text{lb}(n)\),其中 \(\text{lb}(n)\) 表示 \(n\) 的最高二进制 \(1\),这样若对方选择 \(n\oplus\text{lb}(n)\) 则最高位至少变低一位,若对方选择 \(\text{lb}(n)\) 则对方将其拆分后最高位至少变低一位,因此己方操作 \(\log_2(V)=63\) 次后必然结束

时间复杂度 \(O(\sum \log V)\)

代码

参考

\(\textcolor{purple}\odot\) CF1930F Maximize the Difference

\(\max_x((a\;\text{or}\;x)-(b\;\text{or}\;x))=(a\;\text{or}\;b)-b=a-(a\;\text{and}\;b)\),转化为维护一个集合 \(S\),每次加入一个数,或给定一个 \(x\) 求出 \(\max(u\;\text{or}\;x\mid u\in S)\)\(\min(u\;\text{and}\;x\mid u\in S)\)

\(\text{sub}_i\) 表示是否存在 \(u\in S\) 使得 \(i\subseteq u\)\(\text{sup}_i\) 表示是否存在 \(u\in S\) 使得 \(i\supseteq u\),两者容易均摊 \(O(\frac1q n\log n)\) 维护

要求出 \(\max(u\;\text{or}\;x\mid u\in S)\),考虑从高到低贪心,初始令 \(u\gets 0\),设当前枚举到 \(s\) 位,若 \(s\notin x\)\(\text{sub}_{u\cup s}=1\),则把 \(s\) 加入 \(u\),最终的 \(u\;\text{or}\;x\) 即为最大值

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

代码

参考

\(\textcolor{blue}\odot\) CF1929F Sasha and the Wedding Binary Search Tree

二叉搜索树的中序遍历得到的序列一定单调不降,转化为一个值域为 \([1,c]\) 的单调不降序列中若干个位置确定,求方案数

对于每个未确定子段用组合数计算即可

时间复杂度 \(O(\sum n\log V)\),其中 \(O(\log V)\) 为组合数计算逆元的时间复杂度,容易做到 \(O(\sum n)\)

代码

\(\textcolor{purple}\odot\) CF1930E 2..3...4.... Wonderful! Wonderful!

等价于求满足以下要求的 \(0/1\) 串数量:

  • 串长为 \(n\)
  • 其中 \(1\) 的数量为 \(2k\) 的倍数
  • 若序列不全为 \(0\),则存在一个 \(0\) 使得其左侧和右侧都有至少 \(k\)\(1\)

对于每个 \(k\),枚举 \(0\le c<\frac n{2k}\) 表示 \(1\)\(2ck\)

总数量为 \(\binom{n}{2ck}\),若 \(c>0\) 则还要减去不合法的数量

不合法当且仅当总共 \(2ck\)\(1\) 中,除了最左侧的 \(k-1\) 个与最右侧的 \(k-1\) 个,剩下的 \(1\) 构成连续段

把这个长为 \((2ck-2(k-1))\) 的连续段缩为一个点,可得不合法的方案数为 \(\binom{n-2ck+2(k-1)+1}{2k-1}\)

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

代码

参考

\(\textcolor{blue}\odot\) CF1929E Sasha and the Happy Tree Cutting

对于树上的每条边求出覆盖到它的链的子集,得到 \(n-1\) 个集合 \(s_{2\sim n}\),其中 \(s_i\subseteq U=\{1,2,\cdots,k\}\)

相当于要从这 \(k\) 个中选择尽量少的,满足它们的并为 \(U\)

暴力 \(dp\)\(O(3^k)\) 的,无法接受

发现本质不同的 \(s_i\) 只有 \(O(k)\) 个,于是可以 \(O(k2^k)\) \(dp\)

时间复杂度 \(O(n+k\log n+k2^k)\)

代码

参考

posted @ 2025-04-10 06:41  Hstry  阅读(9)  评论(0)    收藏  举报