漫长的告别——8 月杂题集

CF1514E Baby Ehab's Hyper Apartment

求竞赛图的传递闭包,容易想到缩成一条链。

考虑先求出一条包含 \(1\sim n\) 的链然后通过 \(2n\) 次操作 \(2\) 缩点。

考虑增量构造链,假设目前链上有 \(1\sim i-1\),要加入 \(i\),可以二分目前链上最后一个有指向 \(i\) 的点的位置,然后将 \(i\) 插入在其后即可,操作数 \(n \log n\)

QOJ14977 Sakura no Mahou

操作本质是每次从左往右决定每个数是否要异或上前一个数。

考虑从 \(b\)\(a\) 倒推,如果前一个可以是 \(1\) 则后一个 \(0/1\) 都可以,如果前一个只能是 \(0\) 则后一个不变。

直接做就行了。

另外本题的中文翻译错了,题目变为每次选择若干不相交的区间覆盖为原本该区间所有数的异或和,这个版本只能判断是否合法。

[QOJ 14432] Cyclic Topsort

\(f(i)\) 表示删除 \(i\) 后做拓扑排序能摘出来的点的数量,那么本质就是求 \(\max_{i=1}^n f(i)\),直接做复杂度 \(O(n^2)\),考虑优化。

首先将不删除点就能取出的点先取出,这些点是无论如何都会被算在贡献里的。此时所有点的入度都不为 \(0\)

对于两个点 \(x,y\),如果删掉这两个点后新摘出的点集有交集那么这两个点集必然呈包含关系,如果一个点集被包含那么这个点集对应的删除点一定是不优的。

这里有一个非常巧妙的处理方法,点集之间的包含关系可以抽象成一棵树,我们不需要建出这个树,只需要先 random_shuffle 一下编号然后顺次暴力做,跳过之前已经被间接遍历到的点即可通过,容易发现每个点期望被遍历 \(O(\log dep)\) 次。

[IOI 2022] 囚徒挑战

首先容易想到是按进制比对,二进制操作次数直接起飞,根据经典和为 \(n\) 的数乘积最大的划分方式是先尽可能划分 \(3\),考虑三进制。

\(3^7=2187\)\(x \le 7\) 的部分代表询问 \(A\) 的第 \(7-x\) 位,\(x > 7\) 的部分表示询问 \(B\) 的第 \(\frac{x-8}{3}\) 位,且 \(A\) 的这一位为 \((x-8)\mod 3\)

此时 \(x\) 最大为 \(31\)

发现第 \(0\) 位只有在 \(A\) 的部分是 \(1\) 时才需要传递给 \(B\),于是现在需要 \(29\)

一次只能保留一位的信息未免太浪费了,考虑如何整合信息。

发现比较 \(B\)\(A\) 在某一位的大小时可以直接将 \(B\) 的下一位放给 \(A\),此时只需要通过位数来确定该取 \(A\) 还是 \(B\),操作次数 \(24\),省掉最后两次后为 \(22\)

发现直接用 \(3^8\) 的上限会有溢出,可以将一个 \(3\) 换成 \(2\),精细实现后可做到 \(20\) 次。

[QOJ 8732] Zečevi

容易想到二分后转二分图最大匹配。

对于每只兔子,能匹配的区间长度是相同的,所以可以直接贪心匹配。

大致就是从前往后扫,每个胡萝卜优先让能匹配到的最靠前的兔子往后跳。

难点在于如何维护,遍历到兔子时将 \([x_i+p_i,x_i+mid-1]\) 这个区间在动态开点线段树上 \(+1\),遍历到胡萝卜时二分最考前的 \(t_i\) 个点删除即可。

posted @ 2026-07-31 11:58  paper_zym  阅读(14)  评论(1)    收藏  举报