11.27 模拟赛

复盘

T1 一眼不会。模拟样例的时候好像得到了一个对于每次询问 \(\mathcal O(n)\) 做的暴力算法。不太清楚。

画了点图。差不多得到一点想法。发现用 set 维护连通块,总复杂度 \(\mathcal O(n \log^2 n)\),1e6 肯定过不去。但应该能过 80。写写试试。

然后写了一坨。实际上这个时候思路还是很混乱的。

发现有一步不会写,随便蒙了个东西糊上去。显然假。但是数据似乎挺水应该能骗不少分。(这时还不知道捆绑测试。)

2.5h 了赶紧往后看题。

T2 送了 \(10\) 分。部分分好像是倍增。先写写试试 \(m=1\) 的。

没过手造样例。摆了不调了,或许做法是假的。

T3 什么玩意。

T4 送了 \(18\) 分。性质好像都不太会做。写吧。

\(0+0+0+18\)

总结

不足:

  • T1 不会做。
  • T2 调试没删。
  • T2 部分分不会做。
  • T4 性质不会做。

脑子跟被吃了一样,啥也不会。

知识点

T1:数学

T2:倍增

题解

A. 排序

\(f(i,j)\)\(i,j\) 在二进制下最高的不同位。

\(a_i \ne a_{i+1}\) 的情况下,如果想让 \((a_i \oplus x) \le (a_{i+1} \oplus x)\),那么 \(x\) 的第 \(f(a_i,a_{i+1})\) 二进制位是唯一确定的。这取决于 \(a_i < a_{i+1}\) 还是 \(a_i > a_{i+1}\)

所以判断矛盾就很好做了。

然后一次单调修改只会影响 \(\mathcal O(1)\) 个位置。这些位置重构即可。

真服了这么简单为啥想不到。真服了这么简单为啥想不到。真服了这么简单为啥想不到。

B. 交换

注意到对于 \(i_0=j,i_1=j+\operatorname{lcm}(n,m)\),有 \((b_{i_0 \bmod m}+i_0)\bmod n = (b_{i_1 \bmod m}+i_1)\bmod n\)

也就是说每 \(\operatorname{lcm}(n,m)\) 次操作后,交换的两个数的位置是相同的。

所以求一个排列 \(p\) 表示第 \(i\) 个数经过 \(\operatorname{lcm}(n,m)\) 次操作后,\(a_i \gets a_{p_i}\)。用倍增让它跳 \(\lfloor t/\operatorname{lcm}(n,m) \rfloor\) 次。最后剩下的 \(\operatorname{lcm}(n,m)\) 次暴力。

这玩意就能过 \(60\) 分。

真服了这么简单为啥想不到。真服了这么简单为啥想不到。真服了这么简单为啥想不到。

考虑正解。

首先如果 \(m\)\(n\) 的倍数那么跟上面做法一样。

考虑 \(m\) 不是 \(n\) 的倍数的情况。

——官方题解

注意力惊人的出题人。

posted @ 2024-11-27 15:57  2huk  阅读(3)  评论(0编辑  收藏  举报