做题记录 25.8.2

\(\textcolor{purple}\odot\) CF1632E2 Distance Tree (hard version)

\(ds_u\)\(u\)\(1\) 的距离

显然最优情况下选择的路径一端一定为根,否则假设选了 \((u,v)\)\(ds_u\ge ds_v\))则易得换为 \((1,u)\) 一定不劣

对于一个 \(x\),考虑判定一个值 \(rs\) 能否成为答案(即是否有最小值 \(\le rs\)),由于 \(x\) 递增时答案不降,因此用双指针转化为 \(O(n)\) 次判定 \((x,rs)\) 是否合法

\((x,rs)\) 合法当且仅当存在点 \(u\),使得对于任意 \(ds_v>rs\) 的点都有 \(dis(u,v)\le rs-x\)

特判 \(rs\ge \max_u ds_u\) 的情况,此时显然合法

否则找到 \(S=\{v\mid ds_v>rs\}\)(此时 \(S\ne\mathbb\emptyset\))中距离最远的一对点 \((x,y)\),取 \(u\) 为两者的一中点,\(v\) 为距离中点较远的一端,需要有 \(\left\lceil\frac{dis(x,y)}2\right\rceil\le rs-x\)

显然 \(dis(x,y)\) 只和 \(rs\) 有关,因此考虑预处理 \(f_{rs}\) 表示对应的 \(dis(x,y)\)

找到 \(ds\) 最大的点 \(r\),则 \(f_d=\max(f_{d+1},\max_{ds_u=d+1}dis(u,r))\)

容易 \(O(n)\) 预处理

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

代码

参考

\(\textcolor{blue}\odot\) CF1630D Flipping Range

\(b=\{\gcd b\}\) 答案不变

证明:

  • 若存在 \(x\in b,y\in b,y>x\),考虑所有长度为 \(y-x\) 的区间 \([l,l+y-x)\)(下标从 \(0\) 开始)
  • \(l\ge x\) 时,翻转 \([l-x,l+y-x)\)\([l-x,l)\),等价于翻转 \([l,l+y-x)\)
  • \(l<x\) 时,翻转 \([l,l+y)\)\([l+y-x,l+y)\),等价于翻转 \([l,l+y-x)\)(由于 \(x,y\le \frac n2\),因此 \(l+y<x+y\le n\) 在范围内)
  • 可以认为 \(y-x\) 也在 \(b\)
  • 反复迭代,可认为 \(\gcd(x,y)\)\(b\) 中,且显然 \(\gcd(x,y)\) 可以替代 \(x\)\(y\),删去 \(x,y\) 后加入 \(\gcd(x,y)\)
  • 重复直到 \(|b|=1\) 即可

\(g=\gcd b\),则问题转化为每次翻转 \(a\) 一个长度为 \(g\) 的区间,求总和的最大值

\(s_i\) 表示最终 \(i\) 位置是否翻转,则 \(s\) 可达当且仅当对于任意 \(0\le i<g\),有 \(\bigoplus_d [d\equiv i\pmod g]s_d\) 相同

证明:

  • \(t_i=\bigoplus_d[d\equiv i\pmod g]s_d\)
  • 显然初始 \(t_i=0\),每次操作后所有 \(t_i\) 都翻转
  • 因此 \(t\) 都相同是 \(s\) 合法的必要条件
  • 考虑构造操作以证明充分性
  • 对于最终状态 \(s'\),若 \(t'_i=1\),则从初始状态 \(s\) 开始先翻转 \([0,g)\),反之不操作
  • 对于一个等价类 \(\{0\le d<n\mid d\equiv i\pmod g\}\),若能同时翻转 \(d\)\(d+g\) 位置,则这一等价类在 \(t_i\) 不变的情况下可以任意改变 \(s\) 中对应位置
  • 显然翻转 \([d,d+g)\)\((d,d+g]\) 即可实现这一点
  • 从而得到充分性

考虑每个 \(\bmod g\) 的等价类 \(i\),令 \(f_{i,0}\) 表示等价类中选择偶数个位置翻转得到的 \(a\) 的总和的最大值,\(f_{i,1}\) 表示选择奇数个位置翻转,容易 \(O(n)\) \(dp\) 出,最终答案为 \(\max (\sum f_{\ast,0},\sum f_{\ast,1})\)

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

代码

参考

\(\textcolor{purple}\odot\) CF1628D2 Game on Sum (Hard Version)

\(f_{i,j}\) 表示 \(n=i,m=j\) 时的答案,显然 \(f_{i,i}=ik\)\(f_{i,0}=0\),转移为

\[f_{i,j}\gets \max_{x\in R}(\min(f_{i-1,j-1}+x,f_{i-1,j}-x)) \]

显然 \(f_{i-1,j-1}\le f_{i-1,j}\),取 \(x=\frac{f_{i-1,j}-f_{i-1,j-1}}2\),有

\[f_{i,j}\gets \frac{f_{i-1,j-1}+f_{i-1,j}}2 \]

这样得到一个 \(O(nm)\) 的算法

考虑一个 \(f_{i,i}\)\(f_{n,m}\) 的贡献,显然需要除 \(n-i\)\(2\),总贡献为

\[\frac{\binom{n-i-1}{m-i}}{2^{n-i}} ik \]

因此答案为

\[\sum_{i=1}^m \frac{\binom{n-i-1}{m-i}}{2^{n-i}} ik \]

特判 \(n=m\) 的情况

总时间复杂度 \(O(\max n+\sum m)\)

代码

参考

\(\textcolor{purple}\odot\) CF1626F A Random Code Problem

显然第 \(k\) 次修改不影响答案,因此实际用到的对 \(a\) 的修改为 \(1\sim k-1\)

对于变换 \(a\gets a-a\bmod i\)\(a\equiv b\pmod { \text{lcm}(1,2,3,c\dots,k-1)}\),显然 \(a,b\) 变换后增量相同

\(m=\text{lcm}(1,2,3.\cdots,k-1)\)

令所有 \(a_i\gets a_i\bmod n\),并在这之前令答案加上 \(kn^{k-1}\lfloor\frac{a_i}m\rfloor m\)

\(c_i\)\(a\)\(i\) 的数量

\(f_{c,v}\) 表示第 \(c\) 次操作后值 \(v\)\(a\) 中的期望出现次数乘以 \(n^c\)

显然 \(f_{0,v}=c_v\)

转移为

\[f_{c,v}\to f_{c+1,v-v\bmod (c+1)}\\ f_{c,v}\to (n-1)f_{c+1,v}\\ \]

答案为 \(\sum_{0\le c<k}\sum_{0\le v<m} vf_{c,v} n^{k-c-1}\) 加上前面部分累计的总和

时间复杂度 \(O(n+km)\),其中 \(m=\text{lcm}(1,2,3,\cdots,k-1)=O(e^{k+o(k)})\)

代码

参考

\(\textcolor{purple}\odot\) CF1626E Black and White Tree

考虑对于一个点 \(u\) 求解

\(u\) 为根,令 \(s_u\) 为子树内 \(1\) 的数量,令 \(f_u\) 表示从 \(u\) 向下是否能到达 \(1\)

显然

\[f_u=c_u\lor \text{or}_{v\in son(u)}(c_v\lor (f_v\land sz_v>1)) \]

换根 \(dp\) 即可,时间复杂度 \(O(n)\)

代码

参考

\(\textcolor{purple}\odot\) CF1625E2 Cats on the Upgrade (hard version)

将括号按包含关系建成树,忽略 . 和未匹配的括号,则一次修改等价于删去一个叶子

一次区间查询中,对于一个完全位于区间内的子树 \(u\),它对答案的贡献为 \(\frac{s_u(s_u+1)}2\),其中 \(s_u\) 表示 \(u\) 剩余儿子数量,令极大的完全包含于区间中的子树数量为 \(x\),则贡献为 \(\frac{x(x+1)}2\)

建立两个树状数组,第一个按 \(dfn\) 维护区间内 \(\frac{s_u(s_u+1)}2\) 的和,容易维护这部分对答案的总贡献,第二个按类似 \(\text{bfs}\) 序的方式维护区间内还存在的结点数量,容易计算第二部分的总贡献

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

代码

参考

posted @ 2025-08-03 08:06  Hstry  阅读(5)  评论(0)    收藏  举报