做题记录 26.3.23
\(\textcolor{purple}\odot\) CF241B Friends
用 \(\{a\}\) 建立 \(\text{Trie}\),二分答案,转化为给定 \(x\) 和 \(M\),求出 \(\text{Trie}\) 中 \(\oplus x >M\) 的数量和它们 \(\oplus x\) 后的和
前者可以拆分为 \(\text{Trie}\) 上 \(O(\log V)\) 个子树,对于后者,在插入时对于每个子树保存一个长度为 \(O(\log V)\) 的桶,每一个数表示子树内当前这一位为 \(1\) 的数量,则容易 \(O(\log V)\) 求出一个子树内全体数 \(\oplus x\) 的和
时间复杂度 \(O(n\log^3 V)\)
将二分部分和在 \(\text{Trie}\) 上扫的过程结合,可以做到 \(O(n\log^2 V)\)
\(\textcolor{purple}\odot\) CF1779G The Game of the Century
最外层三条边首尾相接时显然无需操作(任意一点都可到达边界,都可从边界到达,而边界上任意两点之间可达)
否则显然同时翻转三个给定字符串,交换三者的顺序都不影响答案,假定 \(s_1\) 和 \(s_2\) 第 \(n\) 位为 \(0\),\(s_3\) 第 \(n\) 位为 \(1\)
即下方为右到左,左右两侧为上到下
令 \(l\) 为 \(s_1\) 后缀 \(0\) 和 \(s_3\) 后缀 \(1\) 数量的较小值,即上方边长为 \(l\) 的正三角形不含从下往上的边,显然必须翻转 \(l\) 条边,不妨设翻转左侧边缘最上方的 \(l\) 条
左下角同理需要翻转一个前缀,若前缀和后缀需要翻转的长度总和 \(>n\),则显然只需要翻转整个左边缘
以上翻转过程显然是必要的,可证是充分的
容易做到 \(O(n)\)
\(\textcolor{black}\odot\) AT_agc054_d [AGC054D] (ox)
将 () 和 ox 两部分分开,前者先贪心地调整为匹配的括号串,可证之后两者内部一定不会发生交换
由此可以 \(dp\),令 \(f_{i,j}\) 表示前 \(i\) 个 () 和前 \(j\) 个 ox 的答案
时间复杂度 \(O(n^2)\)
\(\textcolor{black}\odot\) AT_agc057_c [AGC057C] Increment or Xor
存在解的必要条件为 \(\forall 0\le i<2^{n-1}\),\(a_{i+2^{n-1}}\equiv a_i\pmod{2^{n-1}}\)
若此时 \(a_{0\sim 2^{n-1}-1}\) 的最高位都是 \(0\),即 \(a_{0\sim 2^{n-1}-1}\) 为 \(0\sim 2^{n-1}-1\) 的排列,显然只能将所有数异或上 \(a_0\)
否则若 \(a_i\)(\(0\le i<2^{n-1}\))最高位为 \(1\),则全体异或 \(\overline{a_i}\) 然后加一即可
于是转化为全局加一,全局异或,单点查询的数据结构问题,容易用 \(\text{Trie}\) 解决
显然操作次数不超过上限
时间复杂度 \(O(n2^n)\)
\(\textcolor{black}\odot\) AT_agc055_d [AGC055D] ABC Ultimatum
对于一个串 \(S\),令 \(a_i\) 表示 \(1\sim i\) 中 A 的数量,同理定义 \(b_i,c_i\)
定理 \(1\):合法的必要条件为 \(\max_i(a_i-c_i)+\max_i(b_i-a_i)+\max_i(c_i-b_i)\le n\)
证明:显然 ABC 的数量 \(\ge\) \(\max_i(a_i-c_i)\),另外两个同理,而 ABC,BCA,CAB 总数量 \(\le n\)
定理 \(2\):以上条件充分
证明:
- 考虑构造证明
- 令 \(c_A=\max_i(a_i-c_i)\),\(c_B=\max_i(b_i-a_i)\),\(c_C=\max_i(c_i-b_i)\)
- 对于第 \(i\) 个
A,取第 \(i+c_B\) 个B(若 \(i+c_B>n\) 则减去 \(n\),下同),取第 \(i+c_B+c_C\) 个C,显然在环意义上顺序为A->B->C,且恰好 \(n\) 个环 - 即原串可以划分为 \(n\) 个
ABC,BCA或CAB
容易做到 \(O(n^6)\)
NFLS #35479. 永久集市
枚举每条链,若终止状态需要的 B 数量少于当前有的 B 的数量,则将多余的 A 移到链顶端,反之移动 B,所有链都处理后跨越中间点交换每个链链首多余部分,最后在链内部交换
容易做到 \(O(nm)\)
更方便的算法为枚举每条边,删去这条边后存在两个连通块,计算其中一侧初始状态和终止状态 B 数量的差值的绝对值,最后累加,时间复杂度 \(O(nm)\)
NFLS #35481. 海上的小船
对于每一种出现两次的,设两次分别在 \(u,v\),以 \(u-v\) 的链上某条边为根,子树 \(u\) 到子树 \(v\) 的所有路径都不合法,放到 \(\text{DFN}\) 序上,是 \(O(1)\) 个区间对
转化为若干次矩形覆盖,最后查询没有覆盖的数量,容易扫描线做到 \(O(n\log n)\)
NFLS #35480. 记分板
枚举第一名为 \(i>1\),检查是否可行
将 \(1\) 和 \(i\) 同时通过的题目放到最前面,对于其它人若在这些题中存在没有通过的,则字典序必然小于 \(1\) 和 \(i\),从而可以忽略它们
接下来为了保证 \(1\) 小于 \(i\),紧跟的题目需要满足 \(1\) 没有通过而 \(i\) 通过,且前面剩余的人(即和 \(1\) 和 \(i\) 一样通过了前面所有题)必须都不通过这一题,否则它们的字典序大于 \(1\) 而不合法
还需要存在一题 \(1\) 通过而这些人没有通过,将这一题紧跟在后面,若不存在这样一题则无解(除非不存在剩余的其它人)
容易用 bitset 做到 \(O(\sum \frac{(n+m)nm}\omega)\)
NFLS #35482. 冷藏仓储
假设到一个位置后将那个位置目前所有的都拿到手上,要跨越时再留下一部分
令 \(dp_{l,r,0/1}\) 表示到达过 \([l,r]\),目前在 \(l/r\),要达到 \([1,n]\) 的情况下,手上至少要多少
对于一组询问 \((x,y)\),显然可以达到当且仅当 \(\min(dp_{x,x,0},dp_{x,x,1})\le y+f_x\)
边界为 \(dp_{1,n,0/1}=0\),考虑如何转移
只考虑 \(dp_{l,r,0}\)(\(dp_{l,r,1}\) 对称)
若向左,则
若向右到 \(r\),变为 \(dp_{l,r,1}\),则
化简后第二个转移只和 \(h\) 的区间 \(\max\) 有关,可以做到 \(O(n^2)\)
注意访问连续性
\(\textcolor{black}\odot\) AT_agc060_e [AGC060E] Number of Cycles
定理 \(1\):存在解的 \(k\) 的上界为 \(n+f(a)\),对应的 \(x_i=i\)
证明:
- 若存在 \(x_i\ne i\),则交换 \(x_i\) 和 \(x_{x_i}\) 后,\(f(x)\) 加一,\(f(y)\) 至多减一,\(k\) 不降
- 反复操作,直到 \(x_i=i\),则 \(k\) 达到上界
定理 \(2\):合法的 \(k\) 必须和上界 \(n+f(a)\) 奇偶性相同
证明:
- 对于任意一组合法的 \(x\),交换 \(x_i\) 和 \(x_j\) 后,\(f(x)\) 和 \(f(y)\) 分别 \(+1\) 或 \(-1\),从而总和不变,\(+2\) 或 \(-2\),即奇偶性不变
先令 \(x_i=i\),考虑不断调整之使得 \(k\) 下降到满足要求
枚举 \(a\) 的每个置换环,依次记录编号得到序列 \(p_{1\sim n}\)
从 \(2\) 到 \(n\) 枚举 \(i\),要将 \(x\) 中 \(p_{1\sim i}\) 连成一个环,\(y\) 中 \(p_{1\sim i}\) 连成不超过 \(2\) 个环(具体取决于 \(k\) 的奇偶性),令 \(l\) 表示 \(y\) 中 \(p_{1\sim i}\) 中和 \(p_1\) 不在同一环的某个点(若不存在则为 \(0\)),考虑如何处理 \(i\):
若 \(y\) 中 \(p_{i-1}\) 和 \(p_{i}\) 不属于同一个环,则交换 \(x_{p_{i-1}}\) 和 \(x_{p_i}\),\(l\) 不变,\(k\) 减 \(2\)
若 \(y\) 中 \(p_{i-1}\) 和 \(p_i\) 在同一个环中,且 \(l\ne 0\),则交换 \(x_l\) 和 \(x_{p_i}\),\(l\gets 0\),\(k\) 减 \(2\)
否则 \(l\gets p_i\),交换 \(x_{p_1}\) 和 \(x_{p_i}\),\(k\) 不变
此过程中 \(k\) 的变化在其取值范围上是连续的,满足要求时退出
容易做到 \(O(n)\)

浙公网安备 33010602011771号