试题讲解

华中农业大学出题组

华中农业大学第十五届程序设计竞赛(新生赛)

2025年12月7日

L. 山海之约

题目大意

给定 ,判断 是否成立。

  • 注意每个测试点有多组测试数据,直接判断即可。

I. 学霸题

题目大意
给定三个点 ,找出一个点 使得这 4 个点可以连成一个平行四边形。

  • 不妨设平行四边形即为平行四边形 。对于互不重合的点 ,四边形 为平行四边形的充要条件为

  • 这等价于

  • 即可。


H. 对决

题目大意

给定两个字符串,计算特定子串的出现次数。

  • 注意到子串的长度不超过 5,采用朴素的 的字符串匹配方式即可。

B. 爱的魔法

题目大意

给定一个序列,对于序列中的每一个数,交换至多两个数位。最大化操作后的序列和。

  • 首先,每一个数能取到的最大值是相互独立的。我们只需要求每一个数操作后的最大值。
  • 由于数的数位不超过 6 位,所以对于每一个数,枚举交换的数位取最大结果即可。

A. 矩阵游戏

题目大意

给定一个单调不降的序列 ,矩阵 由序列 复制 行组成。签到哥位于 时可以移动到 。签到哥只能前往值比当前体力小的位置,签到哥移动后体力会相应增加。

  • 由于序列 单调不降,所以相比于移动到 ,移动到 的选择一定更不优;

  • 当签到哥可以移动到 时,移动到 的选择一定更不优。

  • 朴素实现上述过程的时间复杂度是 的。

  • 实际上,从 走到 的操作是重复的。当当前体力为 ,下一列的值与当前体力的差为 时,签到哥还需要在当前列走 次才可以移动到下一列。

  • 按照上述过程模拟即可。时间复杂度


M. 终极考验

题目大意

给定 个石柱的高度。每次操作可以选择一个 ,将第 个石柱直至第 个石柱升高 1 米。最小化使得最后石柱高度单调不降的操作次数。

  • 考虑差分,设 。将单调不降转化为差分序列非负,将区间加转化为差分序列的单点加减。
  • 从前往后遍历差分数组,如果 ,选择 进行 次操作即可。
  • 时间复杂度

G. 二分图判定

题目大意

给定一个序列 ,对满足 的点对 连边。求最小的非负整数 ,使得生成的图是二分图。

  • 首先,最终的答案与 的顺序无关,我们不妨假设它是单调不降的。

  • 原问题等价于将 划分为两个集合 ,其中 中不存在差大于 的元素, 中也不存在差大于 的元素。

  • 也就是说, 中的元素极差不超过 中的元素极差也不超过 。换言之,我们需要最小化 极差的最大值。

  • 中的最大值为 ,最小值为 ,设 中的最大值为 ,最小值为

  • 不妨设 。我们断言,在最优的情况下,

证明

Case 1

  • 如果 ,那么将 中小于 的元素放入 中不会改变 的极差,同时可以让 的极差更小。

Case 2

  • 如果 ,那么将 中小于 的元素放入 中不会使得 的极差超过 。此时问题化为 Case 1。

  • 所以对原序列排序后,我们可以枚举 的分界点,在所有答案中取最小即可。

  • 时间复杂度


J. 鱼骨挖矿法

题目大意

给定一个二维网格表示矿区。分别求出以第 行作为主矿道最终挖掘到矿物的总价值。

  • 对于每一次询问,朴素遍历第 行的每一个格子计算在主矿道中进行挖掘时,挖到矿物的价值是容易的。

  • 考虑如何预处理分矿道对答案的贡献。

  • 我们可以将 分为一组。对于一个给定的 ,它所属的组是确定的。

  • 以挖掘上分矿道的过程为例,记 表示从第 行第 列开始往上挖掘,最终挖掘到的矿物的价值之和。

  • 如果 不为 0:

  • 那么

  • 否则

  • 类似地,预处理 。对于第 列的分矿道, 即为在挖掘主矿道后,挖掘该分矿道时能挖掘到的矿物价值之和。


K. 大师和他的领域

题目大意
给定一个序列 。一个区间是合法的当且仅当:区间内满足 的元素数量等于满足 的元素数量,且存在满足 的元素。求合法的区间数量。

  • 由于 是给定的,所以可以令:
  • 首先记录 的位置。如果区间 满足 的元素数量等于满足 的元素数量,那么
  • 我们可以预处理 的前缀和,然后根据前缀和分组。在每组中枚举下标,然后二分查找最大的边界即可。
  • 时间复杂度

C. 小 W 的计数题

题目大意
给定一个序列 ,对于满足 的每一个 ,找到元素数量最多的集合 ,其中对于任意的 的最大值为

  • 对于固定的 ,考虑如何选择合法的

  • 不妨设 ,也就是说, 必须是 的最大值。由于 是否合法与 中元素是否放入 无关,所以每当

    时,我们都应将 加入 中。 的情况同理。

  • 要维护满足 的数量,我们可以使用单调栈从后往前扫一遍整个序列,弹出比当前元素值小的栈顶元素,当前栈中元素数量即为满足满足 的数量。

  • 维护 的情况同理。注意对于给定的 一定可以放入 中。

  • 时间复杂度


D. 美丽的 01 串

题目大意

给定一个 01 串,选择若干个长度大于 1 的子串删除,使得删除后的 01 串中 ‘0’ 的数量等于 ‘1’ 的数量。最小化删除的子串的长度之和。

  • 不妨设 ‘0’ 的数量小于等于 ‘1’ 的数量。记 ‘0’ 的个数为 ,记第 个 ‘0’ 与第 个 ‘0’ 之间存在 个 ‘1’。特别地,记第 1 个 ‘0’ 之前存在 个 ‘1’,记第 个 ‘0’ 之后存在 个 ‘1’。
  • 记 ‘1’ 的数量比 ‘0’ 的数量多 ,于是
  • 首先,答案的下界为

Case 1

  • 时,我们不需要删除任何子串,答案为 0。

Case 2

  • 为大于 0 的偶数时,我们断言

证明

  • 假设

    注意到

    其中等号当且仅当 为奇数时成立。

  • 我们有:

  • 整理得:

    其中等号当且仅当 均为奇数时成立。

  • 又因为 ,当 均为奇数时,左式与 模 2 同余;又因为 为偶数,矛盾。所以 不全为奇数,等号即无法成立,从而 。这与 矛盾。

  • 所以

  • 所以,存在至少 个长度为 2 的子串 “11”。我们只需要删除它们即可。答案为

Case 3

  • 时,由于原串的长度大于等于 2,所以 ‘1’ 的个数大于等于 2,‘0’ 的个数大于等于 1。
  • 如果不存在满足 ,又因为 ,所以对于 ,都有 ,取 删除即可。此时删除的子串总长度为 3。另一方面,删除子串的总长度大于等于 2,又因为删除子串的总长度为偶数时,不改变 ‘1’ 的个数与 ‘0’ 的个数之差的奇偶性,所以最小的删除子串总长度即为 3。
  • 如果存在满足 ,由于 ‘0’ 的个数大于等于 1,所以我们可以很容易地找到一段连续的 “110” 或者 “011” 并删除。同理,这是最优的操作方式,删除子串的总长度为 3。

Case 4

  • 为大于等于 3 的奇数且 时,如果我们只删除 ‘1’,我们每次只能删除长度为 2 的子串而无法改变差值的奇偶性。
  • 这意味着我们必须删除 ‘0’,从而答案的下界为
  • 由于 ,所以一定存在满足 。根据在 Case 3 中的讨论,我们可以很容易找到一个长度为 3 的子串,其中包含 2 个 ‘1’ 与 1 个 ‘0’。从而问题化归为 Case 2。需要删除的子串长度之和为

Case 5

  • 为大于等于 3 的奇数且 时,我们可以选择一个“111”删除,将问题化归为 Case 2。需要删除的子串长度之和为

E. 更美丽的区间

题目大意

给定一个序列 ,与一个满足 。对于每一个 ,找到最小的 ,使得 中的元素出现次数均不低于

  • 首先,由于 ,所以出现次数大于等于 的元素种类不超过 种。

  • 另一方面,出现次数小于 的元素一定不能包含在区间内。所以我们可以将原序列划分成若干个子段进行处理。

  • 考虑模拟朴素实现。假设当前的左端点为 ,当我们枚举到 时,我们的区间右端点 至少需要满足: 内的出现次数不低于 次。记下标 满足: 中恰有 ,我们可以拿 与当前区间右端点的最大值去更新区间右端点。如果不存在这样的 ,说明对于左端点为 的情况,答案不存在。

  • 实际上,我们可以倒序枚举左端点,记录每种元素出现的位置,同时使用 set 记录当前左端点右边每种元素第一次出现的位置,然后模拟上述过程即可。

  • 对于一个给定的左端点 ,我们只需要枚举至多 次即可完成模拟过程。最终的时间复杂度为


F. 冠军之路

题目大意

给定一棵无根树和 名运动员的位置。多次独立的询问,每次给出小明的起点和比赛的终点,判断比赛的结果。

  • 首先使用多源 BFS 预处理每个点到这 名运动员的距离的最小值。记点 到这 名运动员的距离的最小值为

  • 表示点 与点 的距离。

  • 当给定小明的起点 与比赛的终点 时,如果 ,那么显然小明无法获得冠军,答案为 ;如果 ,那么小明是唯一冠军,答案为 0。

  • 时,存在一个位于从 的路径上的点 ,使得小明与其他运动员第一次在 相遇。

  • 这也就说明,对于小明到达 之前经过的所有点 ,都有 ; 否则小明会和某一名运动员在 相遇,矛盾。

  • 显然,对于从 的路径上的所有点 ,都有

  • 于是我们可以二分 的距离 ,然后倍增求出从 的路径上,与 的距离为 的点 ,判断 是否相等即可。

  • 时间复杂度