题目:2024.10.3 题目

旋律的总数

给定 ,需要构建长度为 的不同序列 。定义满足 的序列 为相等的序列,求满足条件的 的数量,对 取模。


首先,我们考虑没有限制的情况下有多少种选择方式。不难发现,每个音符有 种选择,需要选择 个音符,因此选择数量有 种。由于 可能会出现 种情况,因此一种本质不同的旋律可以引申出另外 种旋律,所以将 除以 即可,也便是

水果加工

片果园,第 片果园种着 吨水果。有两个加工基地,需要将 片果园的所有水果运到加工基地加工。从第 片果园运到第 的基地的时间为每吨 小时。第 个基地有 台机器,需要 台机器组装生产线加工第 片果园的水果,加工速度为每吨 小时。一个果园的水果可以分别运到不同的加工基地。当所有水果运送完之后会同时开始加工。求运输加加工的最小时间。


使用序列 dp。令 表示为已经处理了 个果园,第 个果园对第一个基地运送了 吨水果,基地一使用了 个机器,基地二使用了 个基地,的最小答案。 表示最小运输时间, 表示最小加工时间。

考虑转移。对于一个新的果园,我们枚举 表示为它对第一个基地运送的货物。当 时,基地一需要使用 的机器;当 时,基地二需要使用 的机器。当新的运输时间或新的最小加工时间更优的话,就要对 dp 数组进行状态转移。

然后不知道那里写错了,挂 分。

最佳位置

个座位,会有 个人按照顺序进来。令 表示为离 最近的被占用的座位 的距离。新来的人会选择最小 ,如果有多个选择最小的 ,在 位置上落座。有的人会在中途离开,空出位置。你需要输出每个人落座时会选择什么位置。


采用暴力。对于每个位置 ,我们使用数组 表示位置 是否被占用,这样我们就可以解析出每个询问是加入还是退出了。对于加入询问,我们使用数组 ,令 表示为位置 离它最近的已被占用的位置 的距离(),然后遍历数组 ,找到最大的 较小,将该位置设为已被占用。

对于删除询问,我们加入数组 表示为编号为 的人坐到的位置,那么只需要将 的位置设为 )即可。需要注意的是,在每次询问过后,都要重新更新 数组。时间复杂度

跑步路线

边的连通图,第 条边连接 ,花费时间为 。规定长度为 的路径 ,要按照顺序一个个经过结点 可能重复)。经过的路线必须在图的最小生成树上,且除了起始结点与终点结点外,每个经过的结点都要额外增加 的时间。问你最短时间的合法路线的时间是多少。、


首先,本题在题面已经告诉我们每条边的边权互不相等,那么最小生成树就是唯一的。我们将所有的边收集起来,跑 Kruskal 算法求出最小生成树并保存,即可干掉「路径在最小生成树上」这个条件。

接下来我们考虑 的最短路径。由于最小生成树是一棵树,那么其树上任意两点都只有一条最短路径,而且会经过它们的最近公共祖先(LCA)。

因此我们要求最近公共路线,采用倍增方式。令 表示为结点 往上 个父亲,那么不难推出 。在求 的 LCA 时,我们首先要让 表示为 的深度)。如果此时 ,那么 就是它们的最近公共祖先。否则遍历 ,如果 ,那么就让

最后考虑求最短距离。本题当中有点权 ,但是我们可以将点权包含在边权里面,最后减去 。令 表示为 的路径经过的边权,那么 的最小距离便是 ,其中 的最近公共祖先。

时间复杂度 ,不知道哪里写错了 TLE 分。

总结

  • 排名
  • 比赛分数
  • 情况:相比 2024.10.2 模拟赛,《考得非常不错》;
  • 问题:细节把控非常《到位》。