2021“MINIEYE杯”中国大学生算法设计超级联赛(6)
还就那个没有思维,耶!
[1001 Yes, Prime Minister]
solution
题面:给出
做法:先求个和,即
时间复杂度
1 | //2021.8.13 by ljz |
[1002 Might and Magic]
solution
题面:两个人,每个人都有五个属性:
做法:若分配之后物伤大于等于法伤,那我肯定全选择物伤,则让关于法伤的都为
官方题解是注意物伤关于
坑:向上取整我们可以分子减一再整体加一变成向下取整。
1 | //2021.8.14 by ljz |
[1003 0 tree]
solution
题面:一棵树,有点权
做法:先将边权转为点权,即每个点的第二点权为连接它的边的权值和。那每次操作只与端点有关了。
注意到几件事,首先每次操作的总异或和不变,所以总异或和为
考虑第一权值和第二权值分开来处理。
我们发现同色间进行
同色间进行
于是若同色层的第一权值异或和为
于是问题变成如何让同色层的异或和以及权值和都为
计算一下操作次数,是
另一方面,先处理第一权值的话,操作次数更少,只有
坑:由于 c++
异或负数会出错,所以要每一次操作要注意一下。
1 | //2021.8.14 by ljz |
[1004 Decomposition]
solution
题面:一张
做法:直接构造出一组解,别问我是怎么构造的。设
感觉这种比
如果还有看不懂的就看代码吧。
1 | //2021.8.5 by ljz |
[1005 Median]
solution
题面:给出
做法:先分析下中位数条件。假设一组里大于中位数的个数是
然后再来思考限制中位数意味着什么。我们将
如果还没看懂就看代码吧,感觉有点难以讲明白。
复杂度
1 | //2021.8.15 by ljz |
[1006 The Struggle]
solution
题面:给出
求
做法:容易考虑枚举
但是呢,每一个
然后接下来还没想出来,之后再补。
1 |
[1007 Power Station of Art]
solution
题面:给你一个有标号无向图,每个点有黑或白的颜色以及它自己的标号,每次可以选一条边并交换上面两个点的标号,但是如果两个点的颜色相同,这两个点的颜色会同时改变。现在给你两个形态一致的图,问第一张图经过操作之后能否变为第二张图。
做法:注意到交换操作的等价形式是交换标号和颜色,再反转颜色。于是我们的交换就可以去掉 if
条件了。
那么对于一个标号而言,交换次数的奇偶就代表了它的颜色。这让我们想了二分图。
如果是一张二分图,一个标号在哪一边就意味着它的颜色了。所以只要标号数量和颜色是对应的,那我们一个个按类似拓扑序的顺序来交换点,就保证能构造出方案了。
如果不是二分图,那每个标号的颜色就可以任意换了。于是我们只要标号数量是对应的,利用奇环让每个标号的颜色对应,就可以转成二分图时的构造了。
时间复杂度
坑:1. 图未必连通,要一个个连通块处理。
2. 标号不唯一,可能重复,所以要按数量算。
1 | //2021.8.16 by ljz |
[1008 Command and Conquer: Red Alert 2]
solution
题面:给出三维空间里若干个点,你从任意点出发,每次只能向坐标递增的方向走,路径由你自己构造。问你走的路径到这若干个点的切比雪夫距离的最小值。
做法:考虑二分答案。那么那就等于在一堆正方体中找出一条路径满足每个正方体都被碰到。一个贪心就是找到一个
再冷静一下,发现也没必要二分答案了。考虑直接将所有点平移到正方体的左前下角,那么我们每次贪心想找的点就是这些点本身了,直接找就行了。时间复杂度也是
坑:实现下面那个做法的时候,注意到所有点平移了,所以这里求得的
1 | //2021.8.16 by ljz |
[1009 Typing Contest]
solution
题面:每个人有两个数值
做法:稍微做一些化简,即
发现前面两个东西和
然后考场上 ljc 迅速发现
我们还是考虑对每一个人进行计算,那么对一个人而言的贡献就是
这样的话,复杂度就变成了
坑:1. 注意
2. 虽然他题面是让你输出九位小数,但他让你输出的小数是在
3. 乘上
1 | //2021.8.16 by ljz |
[1010 Array]
solution
题面:给出一个
做法:我们刚开始肯定是想直接构造
我们考虑
首先,
接下来我们看那个不等式的限制,即
。这一定不合法了,因为无处放 。 。这也一定不合法了,因为 不合法。 和 只有一个不合法。那就只能选合法的那个了。 和 都合法,但 。注意到扫描到后面时,若可以放 就一定可以放 ,所以我们选择更不劣的方案,这里放 。 和 都合法,但 。我们暂时的方案是放 ,但同时从 中去掉 ,在 中加入 。若最终构造方案有了 ,那这种方案无问题。若没有,我们将 变成 即可。而且,这种暂时的方案是不会影响到其他构造的,理由同上。
于是,我们就成功做到了最优的构造。实现上,维护这两个集合可以用 set
或者 list
,做到时间复杂度
1 | //2021.8.22 by ljz |
[1011 Game]
solution
题面:两个人在博弈,设当前区间为
做法:说下我考场的思路。我们先将状态转移图写出来,发现如果没有那些特殊区间,
有了这个性质,我们考虑按
现考虑一个询问 map
维护的,总时间复杂度
具体实现上,我们在暴力维护特殊区间相关区间时,是要按从小到大的顺序的,因为有可能相关区间之间会互相影响。具体处理手段可以看代码。
1 | //2021.8.16 by ljz |