JOI Final 合集
2015
C
傻逼题。
D
显然需要二分答案,然后不会了。
操作是固定的,建出操作树,然后在上面 dp 即可。
E
左上角,右下角,有一个贡献,数据结构瞎维护就行。
2016
C
最短路径 dag 搞出来,找割边。
D
和 这题 差不多,懒得写了。
E
倒过来,最后地表的点向下移动。
然后发现每个操作一定是修改一个前缀或者一个后缀,用三颗线段数维护值,左边和右边能影响到这个点的值。
2017
C
首先最大值和最小值显然要放在两个块里,不然一定不优。
二分答案,然后对于每一行,肯定是前面和后面分开,瞎判一下就好了。
D
直接建图,一个点表示这个点是人带着球,然后踢出或者运球,踢出去之后,在目标位置找最近的一个人过来接。
直接暴力就是 ,学习了一下 的 dij。
也可以优化一下,踢出的球要么横着,要么竖着,因此拆成三个点即可。
E
考虑倒过来,最后是两个点,去扩展,相当于选一段复制一下。
瞎证明一下会发现出了两端的两个点,其他连续段长度一定是偶数,并且所有满足这个条件的都可以凑出。
然后考虑相邻两个的贡献就没了。
2018
C
按绿色点确定,然后发现只有在一条斜线上的会互相影响,然后每一斜上 dp 即可。
D
先对四个点去跑最短路。
然后显然是在 到 的最短路 Dag 上找一个点连 ,另一个连 ,那么只需要在后继上找个最小值即可。
E
好题,想很久。
可以发现有若干个暴力,比如枚举每个 ?
。
那么再想几个暴力然后合并一下。
考虑如果只有 ?0
咋做。
预处理一下即可,相当于子集加。
然后如果有 1
,容斥一下,把 1
变成 0?
,然后做就行了。
拆成三个部分,复杂度 。
2021
C
最后的序列一定是若干个下降区间,每个下降区间的值域连续。
交换次数又满足每次把东西扔最前面是最小的。
因此直接 dp,每次枚举一个前缀放到最前面然后计算需要交换的次数即可。
D
暴力建图,没啥意思。
E
先 排序。
考虑到每个地方,如果补满之后可以到达一个比自己便宜的地方,那么肯定恰好到那个地方,否则补满。
那么建一颗树,表示每个点会去那个地方,注意到修改次数是 的。
弹飞绵羊,就可以 了。
2022
C
去年不会做。
考虑最后肯定是 排序,然后选一些,然后再选 。
注意到一个性质,那些选 的前面,肯定都是选了的,不可能空着,不然可以换。
暴力 dp 就是 了。
D
倍增,维护左右到的地方即可。
E
把一个子矩形扣出来,那么对于每个点,在周围一圈找比自己大的最小的和比自己小的最大的,肯定一个入边一个出边。
如果可以全部连起来,那么肯定合法。
那么考虑每个点的度数都是 ,简单的想法是对于每条边令权值为大的减去小的,那么全部加起来一定是最大值减去最小值。
最大值不好搞,直接如果没有比自己大的就把这头的值变成 Inf。
这样每个点都有自己的权值,相当于一个二位前缀和。
横竖取个 ,然后做,复杂度 。
2023
C
直接 bfs,但是每个点的更新范围是一个正方形。
此时一个很妙的是,起点暴力更新一个正方形,然后每个点只需要更新最外面一圈即可。
也有一个比较容易想的做法,先横着更新,然后竖着。
D
简单题,一个点会到比自己小的点上,但是不能经过比自己大的,因此直接从小到大加点即可。
E
每个东西的贡献就是把一个前缀变成 R
或者后缀变成 B
。
首先通过 次操作,就可以把序列变成前缀是 R
,后面全都是 B
的结构。
然后再去分讨操作对这个中间分界线的影响。
代码还没写,先咕。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理