ABC396 题解

ABC396

A

枚举 \(i\)\(1\)\(n-2\),如果存在 \(a_i=a_{i+1}=a_{i+2}\) 就 Yes,否则就 No。

submission.

B

维护一个空栈,如果栈被弹空就意味着只剩初始的 \(100\)\(0\) 了,查询时输出 \(0\);否则就正常进行插入、弹出。

submission.

C

白球、黑球显然要取最大的几个。
将其从大到小排序,记录下它们的前缀和 \(\{sum_n\}\)
因为要求白球的数量小于等于黑球,我们枚举白球的个数 \(i\),那么黑球最优就取 \(\max_{j=i}^n sum_j\),即后缀 max。预处理一下即可。

submission.

D

\(n\) 只有 \(10\),故直接枚举点列的全排列,每种路径必然是这些排列的某个前缀(想想是怎么枚举全排列的不难得到),再扫一遍路径求出路径的异或和,取 min 输出。时间复杂度 \(O(n \cdot n!)\)

submission.

E

这些个限制可以建图处理。即对于每个 \((x,y,z)\),将 \(x\)\(y\) 连一条权值为 \(z\) 的边。

如果确定一个连通块中一个点已确定,那么这个连通块中所有点都会确定。

发现无解等价于有异或和非零的环。
充分性显然,这个环上的某个点赋任意值,异或一圈显然不等于自己,矛盾。
必要性即无异或和非零的环就有解。这个环不会影响赋值,即相当于没有环。这样就可以任意赋值了。

这种位运算题,注意到每一位是独立的,故拆位处理。
对于每个连通块中的点,任意钦定一个点为 \(0\),然后就可以确定连通块中所有点的当前位。记连通块大小为 \(c\),这样赋值如果和大于 \(\frac{c}{2}\),我们就可以把每一位 flip 一下(flip 之后显然合法,因为 \(x \oplus y = \neg x \oplus \neg y\)),得到一个小于等于 \(\frac{c}{2}\) 的解。

最后将每一位合起来就做完了。时间复杂度 \(O(n \log V)\),其中 \(V\) 为值域。

submission.

F

\(k = 0,1, \dots m-1\) 可以理解为每轮全局 \(+1\)
逆序对的变化来源于 \(a_i\)\(m-1\) 时,再 \(+1\) 取模就变成 \(0\) 了。

考虑每个 \(a_i\) 变为 \(0\) 时产生的贡献。
\(a_i\)\(m-1\) 时(上一秒的状态),\(a_i\) 一定是全局的最大值,和 \(a_i\) 有关的逆序对即为初始序列 \(i\) 后面 \(\ne a_i\) 的值的个数 \(x\)。这个值可以用桶计算。
\(a_i\) 变为 \(0\) 时(当前的状态),\(a_i\) 一定是全局的最小值,和 \(a_i\) 有关的逆序对即为初始序列 \(i\) 前面 \(\ne a_i\) 的值的个数 \(y\)
故在 \(a_i\) 变成 \(0\) 的那个时刻(\(m-a_i\)),答案会加上新产生的 \(y\),减去旧的 \(x\)

然后这相当于一个差分数组。第 \(0\) 时刻的逆序对用树状数组搞搞,然后做个前缀和还原出答案数组,输出即可。时间复杂度 \(O(n \log m)\)

submission.

G

不会,据说要用多项式。

posted @ 2025-03-08 22:32  Water_M  阅读(98)  评论(0)    收藏  举报