MMOI Round 2 题解
2026-07-07 09:47:06
发布于:河南
T1 追忆
显然当 时,需要 分钟才能将每一面都煎一遍;否则答案总是 。由于所有饼一共有 面,至少需要这么长时间才可能能煎完所有饼;又因为 ,按照 的顺序每次取 个饼煎一次不可能取到重复的饼,且恰好能在这么长时间内煎完所有饼,我们证明了这个结论。
T2 无限水
可以发现新的格子变成水源后水域的周长不会变大,因此需要放置的冰块数下界为 。下面给出一种能取到下界的构造:
- 若 不都是偶数,放第一行的 列和第一列的 行,若 是偶数,额外放 ;若 是偶数,额外放 。
- 若 都是偶数,放第一行的 列和最后一列的 行,以及左下角 。
容易证明这样的构造符合条件并且放置了恰好 个冰块。
T3 无处存储
在输入时求出所有数的异或和 ,以及所有二进制下第 位为 的数的异或和 。 中出现两次的数在 中会被抵消,所以 。
又因为 ,所以 。设 在二进制下的第 位为 ,则 在第 位分别为 ,只有一个数被计入 ,所以两个数分别为 和 ,按照大小顺序输出即可,空间复杂度 。
T4 攀登
使用并查集维护每个数所在的可重集,并对每个可重集维护包含可重集内所有大于 的数组成的链表 、值为 的数的个数 、值为 的数的个数 和可重集内所有数的和 。
合并两个可重集 时,将两个链表 合并得到新的 ,同时 ,,。
对一个可重集 进行操作时,很容易计算不在链表中的数的贡献,若 则 ,;若 则 ,。对于链表中的数,我们直接暴力枚举每个数进行修改,若修改后小于等于 则从链表中删除并计入对 的贡献。
不难发现一个数 在进行 次操作后就会变成 或 ,因此每个数只会被链表暴力枚举到 次,总时间复杂度 。
全部评论 24
罐头
昨天 来自 北京
11T3不赖,孩子爱吃
昨天 来自 浙江
10为什么官方解法没几个人看,最有意思的是T2。
2天前 来自 重庆
9因为认真做的没几个
昨天 来自 浙江
7因为没几个能认真做
昨天 来自 浙江
5T2有原吧
昨天 来自 广东
1
d
18小时前 来自 浙江
2求赞



https://xmcdn.oss-cn-shanghai.aliyuncs.com/cpp_community/images/sticker/acgo/%E5%A4%A7%E4%BD%AC.png
https://xmcdn.oss-cn-shanghai.aliyuncs.com/cpp_community/images/sticker/acgo_gif/%E5%8A%A0%E6%B2%B9%E5%96%9D%E5%BD%A9.gif6小时前 来自 北京
1d
昨天 来自 陕西
1
昨天 来自 浙江
1求赞
6小时前 来自 北京
0求赞


6小时前 来自 北京
0
9小时前 来自 广东
0d
12小时前 来自 北京
0d
12小时前 来自 北京
05

17小时前 来自 广东
04

17小时前 来自 广东
03
17小时前 来自 广东
02
17小时前 来自 广东
01
17小时前 来自 广东
0d
18小时前 来自 浙江
0d
18小时前 来自 浙江
0d
18小时前 来自 浙江
0







































有帮助,赞一个