JOISC 2021 记录
Day1 T1 Aerobatics
神秘的提交答案题。
Day1 T2 IOI 熱の感染拡大
我们可以通过移动+旋转坐标系,使得第 1 个宫殿在
考虑到第
已经知道了方向,现在考虑如何计算答案。
如果两个点满足
对于每一个王子,我们找到它第一次被感染的时刻,则在此之后的所有相遇,他都会发生感染。这个过程类似 Dijkstra。
我们按照在
这个信息可以使用线段树维护,时间复杂度
Day1 T3 フードコート
加入没有删除操作怎么做。我们相当于是要找在哪一个时刻,一个队伍的人超过了
现在考虑删除操作,如果我们能够维护出来我们删去了多少个人,就可以通过修改询问的
时间复杂度
Day2 T1 逃走経路
可能的到达方式有两种:在一天之内到达和在若干天到达。
在若干天到达可以被拆分成,第一天,中间的若干整天,和最后一天。其中,第一天可以看作从
而对于在一天之内到达的情况,我们考虑每一条路径都会被某一条边作为最紧的限制限制住,我们枚举这条边,然后向前和向后拓展最短路,这样每一个点对之间都会得到
时间复杂度
Day2 T2 道路の建設案
我们首先考虑二分答案找到第
由于曼哈顿距离不好维护,所以将坐标系旋转
我们将所有点按照
总体时间复杂度为
Day2 T3 買い物
神秘题,还没有做。
Day3 T1 古代の機械
首先,在第一个 X
左边和最后一个 Z
右边的字符必然不会对答案做出贡献。
然后剩下的每一个连续的 Y
的至多只能够有一个做出贡献,这个是答案的上界。
我们考虑如何能够取到这个上界:我们先找到最左边一个 X
,将其左边的点都删去,然后找到最左侧的一个 Z
,从右向左将 X
和 Z
之间的字符删去,然后删去 Z
。
考虑这个过程为什么能够取到上界,由于我们找到的是最左侧的一个 Z
,所以在这个 Z
之前的所有字符不是 X
就是 Y
,这也就意味着对于每一个 Y
的连续段,我们删去其中最后一个的时候,它的左侧必然是 X
,同时它的右侧就是我们找到的这个 Z
,这个 Y
就会做贡献。
这样我们就只需要传输一个 X
以及接下来的所有 Z
即可。
但是其实还有很多的没有意义的信息,例如对于一个连续段的 Z
,完全可以从其中最后一个 Z
开始删去。考虑这样有什么好处:除了最左侧可能会出现
Day3 T2 ボディーガード
我们将每一个人的路径在
将其离散化之后变成网格图。警卫在走到了格点之后,必然会沿着格线走,我们可以用 DP 来直接计算出从每一个格点出发的答案答案。现在的问题就是警卫先走到哪个格点上。
通过调整法可知,警卫必然先水平或者竖直走到某一条格线上,然后往后走到对应的格点上,然后就可以直接取 DP 值了。分别处理先水平走和先竖直走两种情况。每一种情况都可以对应为若干个一次函数在某一点取最大值,考虑直接使用李超线段树维护,时间复杂度
Day3 T3 ビーバーの会合 2
对于奇数个点,答案必然为
我们考虑如何找到这一条链的两个端点。我们看一个点最多可以为某一条边容纳多少个点:这个值应该等于断掉了某一条边之后,它所在的的连通块的大小的最小值,具体的就是断掉它最大的一个儿子。这个显然是一个下界,考虑为什么也是上界:如果它对应的连边不是断掉它最大的一个儿子,显然这条链的另一端能够选择到的点数必然小于这个值;如果断的是最大的儿子,这这个点能够选择的点数就是这个值。
所以我们只需要按照一定的顺序加入这些点,然后动态维护直径即可,时间复杂度
Day4 T1 イベント巡り 2
显然有一个贪心:每一次选择右端点最左的区间。这样能够取到可能的答案上界,而这个贪心跳的过程可以直接用倍增维护。
现在考虑如何找到字典序最小的答案:我们可以直接计算在选择第
用 set 维护当前还没有被选择的区间,然后每一次用倍增维护区间的答案即可,时间复杂度
Day4 T2 道案内 2
显然每个格子只能存储 12 种信息,将多个目的地的信息压缩到一个格子内很不现实,而我们可以看到
这样每一个格子对应的位置是稀疏的,所以每一个格子对应的方向需要在
但是考虑到中心的那
我们可以通过调整每一个目的地对应那个格子集合来使得不会有任何一个目的地本身属于其对应的格子,这样原先中心的
Day4 T3 最悪の記者 4
考虑树的情况怎么做:我们对于每一个点维护一个 DP 值
转移为
发现这个 DP 可以使用线段树合并优化转移。
考虑最后树上的那个环怎么处理:环上的点数字必然全部相同,只需要枚举改成环上某权值,或改成全局最小值的代价即可。时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通