JOI Final 2020 题解

JOI 2020 Just Long Neckties

首先一定是贪心将两个从小到大排。然后考虑维护 aibi 的前缀 max 与 ai+1bi 的后缀 max 即可。

https://qoj.ac/submission/113106

JOI 2020 JJOOII 2

考虑维护出每个点往前跳 k 个 J/O/I 跳到哪里。于是枚举右端点,然后往前跳找到最大的左端点即可。

https://qoj.ac/submission/113117

JOI 2020 Collecting Stamps 3

考虑破环后设计 DP:f(l,r,x) 表示目前走遍了 [l,r] 并停在了 l 并拿了 x 个邮票的最小用时,g(l,r,x) 表示停在 r 的最小用时。于是 f(l+1,r,x) 就可以转移到 f(l,r,x) 满足 x=x+[f(l+1,r,x)+dl+1dltl]。同时还有 f(l,r,x)g(l,r,x) 的互相松弛(用 drdl 松弛)。

https://qoj.ac/submission/113146

JOI 2020 Olympic Bus

考虑对于边 uv,翻转后对于 1nn1 的影响。以 1n 为例。如果 uv 是最短路必经边,那么就求一下删掉之后的最短路;如果不是,那么就有两种情况,取原最短路,和取反边后 1vun,显然两者都不会用到 uv。删掉之后的最短路考虑最短路图后支配树。由于这题有零边所以不能直接 DAG 支配树!暴力复杂度 O(nm) 即可。

https://qoj.ac/submission/113239

JOI 2020 Fire

首先考虑 L=1,R=N 怎么做。我们发现每个 si 覆盖的区间会不断右移。ai 表示 si 覆盖的区间左端点开始动的时间,即最大的 j 满足 s[ij,i)si;同理 bi 表示区间右端点停止的时间,即最大的 j 满足 s(i,i+j]<si。考虑 ft 表示 t 时间的和,那么 sift 的贡献是一个类似梯形的一个关于 t 的函数,我们可以轻易通过 ai,bi 找到 if 的二阶差分的贡献的位置。然后考虑分块,同理我们也可以对于每个块,处理出它的 f,遍历每个 isi 对这个块的 f 的二阶差分的贡献的位置。具体而言,对于块 [L,R],块左边的贡献为 Li+siLi+ai+1simin(Ri,bi)+1simin(Ri,bi)+ai+2+si。块内部点的贡献后面两个是相同的,前面的是 0+si 以及 ai+1+si

https://qoj.ac/submission/113415

posted @   LarsWerner  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示