题目:2024.10.3 题目
旋律的总数
给定 ,需要构建长度为 的不同序列 。定义满足 的序列 为相等的序列,求满足条件的 的数量,对 取模。
首先,我们考虑没有限制的情况下有多少种选择方式。不难发现,每个音符有 种选择,需要选择 个音符,因此选择数量有 种。由于 可能会出现 共 种情况,因此一种本质不同的旋律可以引申出另外 种旋律,所以将 除以 即可,也便是 。
水果加工
有 片果园,第 片果园种着 吨水果。有两个加工基地,需要将 片果园的所有水果运到加工基地加工。从第 片果园运到第 的基地的时间为每吨 小时。第 个基地有 台机器,需要 台机器组装生产线加工第 片果园的水果,加工速度为每吨 小时。一个果园的水果可以分别运到不同的加工基地。当所有水果运送完之后会同时开始加工。求运输加加工的最小时间。
使用序列 dp。令 表示为已经处理了 个果园,第 个果园对第一个基地运送了 吨水果,基地一使用了 个机器,基地二使用了 个基地,的最小答案。 表示最小运输时间, 表示最小加工时间。
考虑转移。对于一个新的果园,我们枚举 表示为它对第一个基地运送的货物。当 时,基地一需要使用 的机器;当 时,基地二需要使用 的机器。当新的运输时间或新的最小加工时间更优的话,就要对 dp 数组进行状态转移。
然后不知道那里写错了,挂 分。
最佳位置
有 个座位,会有 个人按照顺序进来。令 表示为离 最近的被占用的座位 离 的距离。新来的人会选择最小 的 ,如果有多个选择最小的 ,在 位置上落座。有的人会在中途离开,空出位置。你需要输出每个人落座时会选择什么位置。
采用暴力。对于每个位置 ,我们使用数组 表示位置 是否被占用,这样我们就可以解析出每个询问是加入还是退出了。对于加入询问,我们使用数组 ,令 表示为位置 离它最近的已被占用的位置 的距离(),然后遍历数组 ,找到最大的 且 较小,将该位置设为已被占用。
对于删除询问,我们加入数组 表示为编号为 的人坐到的位置,那么只需要将 的位置设为 ()即可。需要注意的是,在每次询问过后,都要重新更新 数组。时间复杂度 。
跑步路线
有 点 边的连通图,第 条边连接 ,花费时间为 。规定长度为 的路径 ,要按照顺序一个个经过结点 ( 可能重复)。经过的路线必须在图的最小生成树上,且除了起始结点与终点结点外,每个经过的结点都要额外增加 的时间。问你最短时间的合法路线的时间是多少。、
首先,本题在题面已经告诉我们每条边的边权互不相等,那么最小生成树就是唯一的。我们将所有的边收集起来,跑 Kruskal 算法求出最小生成树并保存,即可干掉「路径在最小生成树上」这个条件。
接下来我们考虑 到 的最短路径。由于最小生成树是一棵树,那么其树上任意两点都只有一条最短路径,而且会经过它们的最近公共祖先(LCA)。
因此我们要求最近公共路线,采用倍增方式。令 表示为结点 往上 个父亲,那么不难推出 。在求 的 LCA 时,我们首先要让 ( 表示为 的深度)。如果此时 ,那么 或 就是它们的最近公共祖先。否则遍历 ,如果 ,那么就让 。
最后考虑求最短距离。本题当中有点权 ,但是我们可以将点权包含在边权里面,最后减去 。令 表示为 的路径经过的边权,那么 的最小距离便是 ,其中 是 的最近公共祖先。
时间复杂度 ,不知道哪里写错了 TLE 分。
总结
- 排名:;
- 比赛分数:;
- 情况:相比 2024.10.2 模拟赛,《考得非常不错》;
- 问题:细节把控非常《到位》。