试题讲解
华中农业大学出题组
华中农业大学第十五届程序设计竞赛(新生赛)
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。
-
当
时,存在一个位于从
到
的路径上的点
,使得小明与其他运动员第一次在
相遇。
-
这也就说明,对于小明到达
之前经过的所有点
,都有
; 否则小明会和某一名运动员在
相遇,矛盾。
-
显然,对于从
到
的路径上的所有点
,都有
。
-
于是我们可以二分
到
的距离
,然后倍增求出从
到
的路径上,与
的距离为
的点
,判断
与
是否相等即可。
-
时间复杂度

京公网安备 11010502036488号