European Championship 2024 - Online Mirror
A. Grove#
给你一个 的方格,往里面的整点上尽可能放半径为 的圆( 是个三位小数),最多放几个。
看过一些密铺问题的结论,感觉排列方法似乎没啥道理可讲。
大概感觉是个怎么记忆化 + 启发式 + 爆搜的题。显然应该尽可能的放近的,记忆化去除一些重复的搜索。因为没有队友写,瞎几把口胡的好像完全没啥能过的道理啊?
B. Charming Meals#
队友写了一题就走了。
C. Annual Ants' Gathering#
给你一棵树,每个点上有一个蚂蚁,每次你可以让点 上的所有蚂蚁沿着一条边走到 ,满足 上的蚂蚁数量小于等于 上的数量。问最后能不能把所有蚂蚁集中到一个电上。
显然,你把一个点留空了,那这棵树就断掉了,所以你每次只能缩一个叶子。并且由于小的点才更有可能缩,小点缩完才会产生大点让其它东西有机会走。
所以,大概维护小顶堆,模拟一个拓扑排序的东西,就行了。
F. Dating#
给你 个人,每个人有一个集合。定义好匹配是,两个人的集合有交,但是不互相包含。找一个好匹配,或者报告没有。
胡编乱造了一个做法,基于这个集合大小的种类数是根号量级的(600 种)。
首先,对于每种集合大小,看下这里面是否重复的完全相同集合,去掉(使用无序集合哈希)。然后,看一下有没有两人的集合有交,也就是看看有没数字重复出现,有的话就有交,又因为长度相同而且不是完全相同,所以就是答案。
于是,我们现在得到了 600 种长度,每个长度里有一堆不相交的集合。
然后,从大到小枚举长度,构建一个包含集合关系的森林,然后维护每种树最后一次被哪个节点覆盖。
对于当前长度中的每一个集合,遍历集合拿出每个数最后一次被覆盖的节点是哪个,对于这个覆盖节点集合,有几种情况:
- 存在两个点在森林里的两棵树上,那么我们找到了一组答案,当前集合和两个点中任意其一:因为,找到了点说明有交,在不同的树上说明当前集合中的数必定不在另一个里面,又由于长度限制当前集合必定不包含之间所有集合。
- 存在两个点在森林里的同一棵树上,那么由于包含关系,这两者一定有祖先关系,选择当前集合和最深的那个作为答案:因为,找到了点说明有交,能找到两种最后覆盖的点上说明这个数在祖先集合里,而不再子孙集合里,又由于长度限制当前集合必定不包含之间所有集合。
- 存在一个点在森林里的同一棵树上,那么连一条边,找到了父子关系。
G. Scooter#
没有队友愿意写。
感觉大概对着题意构造下就行了,比如 -m mc cm mc c- -c cm m- -c cm m- 这样弄弄。
I. Disks#
给你一堆可能相切可能相离的圆,问你是否可能通过调整所有圆的半径,使得原本的相切相离关系不变,且所有圆的半径和变小。
大概观察一下可以发现,因为你要保持相切关系,所以你缩一个圆,必然带来另外一个圆变大,两者抵消。
然后在观察一下样例给了个长度为 3 的链,可以弄成一个 "小 - 大 - 小" 的样子,就会减小半径和了。然后考虑复杂的图会怎么样,比如有环,偶环可以,但是奇环不行,自然联想到二分图。因此大概就是对原图二分图染色,相当于减小和加大两种变化,看一下有没有连通块左右两部点数不同。
J. Amanda the Amoeba#
没有队友愿意写。
就感觉枚举目标方格中的每个点,然后删除一些边界上的、没放好的点,一步一步地走过去。