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



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.gif5天前 来自 北京
5d
6天前 来自 浙江
5
3天前 来自 广东
3
3天前 来自 广东
3
3天前 来自 广东
3
3天前 来自 浙江
0

2天前 来自 广东
1d
6天前 来自 陕西
1
6天前 来自 浙江
1666
1小时前 来自 山西
0刷罐
18小时前 来自 浙江
0罐头
昨天 来自 上海
0可以发现新的格子变成水源后水域的周长不会变大,因此需要放置的冰块数下界为 ⌈
2
n+m
⌉。下面给出一种能取到下界的构造:若 n,m 不都是偶数,放第一行的 1,3,5,7,… 列和第一列的 3,5,7,… 行,若 n 是偶数,额外放 (n,1);若 m 是偶数,额外放 (1,m)。
若 n,m 都是偶数,放第一行的 1,3,5,…,m−1 列和最后一列的 2,4,6,⋯,n−2 行,以及左下角 (n,1)。
容易证明这样的构造符合条件并且放置了恰好 ⌈
2
n+m
⌉ 个冰块。
是错的!!!昨天 来自 浙江
0只要max(n,m)个就行
昨天 来自 浙江
0按对角线放
昨天 来自 浙江
0如n=3,m=3:
001
010
100昨天 来自 浙江
0
/bx
2天前 来自 广东
0额,为什么还扯了一嘴mc
2天前 来自 上海
0d
3天前 来自 北京
0d
3天前 来自 北京
0d
3天前 来自 北京
0开了吧
3天前 来自 浙江
0
3天前 来自 浙江
0























































有帮助,赞一个