- 博客(47)
- 收藏
- 关注
原创 第十四届蓝桥杯省赛C++C组C题【三国游戏】题解(AC)
根据贪心的策略,我们可以考虑将所有时间按照贡献进行排序,贡献越大则优先选择。由于三种国家都有获胜的可能,所以我们需要分别枚举。
2024-07-19 15:54:10 394
原创 第十四届蓝桥杯省赛C++B组H题【整数删除】题解(AC)
删除一个数时,会导致其相邻的数增加,要修改堆中任意位置的元素较为困难,但删除堆顶元素较为简单(先取堆顶元素,修改后再放回堆中),故当要增加某个元素的值时,我们可以对该数进行标记,待该点成为堆顶时,出队修改后放回。个最小值,在删除一个数后,该数的相邻数加上它的值,输出最终数组。在一个无序数组中查找最小值,我们可以考虑将数组的元素都放进堆里。,故我们可以考虑用链表进行维护,这样删除一个数的时间复杂度为。综上,当要删除一个最小值时,可以从堆顶取出一个元素。数组中删除一个数的复杂度为。
2024-07-18 10:47:41 493
原创 第十四届蓝桥杯省赛C++B组G题【子串简写】题解(AC)
统计某个位置的左侧有几个字符。使用二重循环枚举左端点和右端点,判断是否为。数据范围较大,我们需要将时间复杂度控制在。结尾的字符串,那么我们可以对于每个字符。统计某个位置之后字符。我们可以去遍历整个字符串,对于每个。结尾的字符串,是则答案加一。字符的右侧有几个字符。
2024-07-05 15:21:13 1914
原创 第十四届蓝桥杯省赛C++B组F题【岛屿个数】题解(AC)
点,如果我们要将一个岛屿和其内部的岛屿都视为一个整体,那么不妨将内部的海也视为一个整体,那么这个内海,就和原本地图上的外海不一致,所以我们可以考虑,将地图上的所有外海设为字符。,倘若单纯求岛屿的个数,可以直接遍历整个地图,若找到一块地,就是一个岛屿,然后将该岛屿清除(标记或改将该岛改为海)。另外,若一个岛屿在另一个岛屿的内部,则不统计。如下图中的大岛屿包含着内部的小岛屿,故内部小岛屿不计算,最终输出。八联通扩展,可以将有缝隙的岛渗透进入标记外海,而无缝隙的岛屿即为一整个岛屿(含内岛和内海)。
2024-07-05 15:03:51 887
原创 第十四届蓝桥杯省赛C++B组E题【接龙数列】题解(AC)
对于一个数能不能放到接龙数列中,只关系到这个数的第一位和最后一位,所以我们可以先对数组进行预处理,将所有的数变为两位数,例如。题目要求最少删掉多少个数后,使得数列变为接龙数列。相当于题目要求求出数组中的最长接龙子序列。计算得出,故可以使用滚动数组进行优化。那么接下来考虑如何求接龙序列的最大值。,取出最后一位时,只需要计算。,这样当我们需要取出一个数。的第一位时,只需要计算。那么接龙数列的最大长度为。
2024-07-02 22:02:39 1017
原创 第十四届蓝桥杯省赛C++B组A题【日期统计】题解(AC)
的子序列,判断是否是有效日期并去重,时间复杂度。枚举所有日期,判断是否存在对应子序列,时间复杂度。法二明显优于法一,不仅效率更高,代码也更容易完成。年的日期(每个日期只能算一次)。给定的字符串中,有几个子序列是。
2024-07-02 16:19:20 390
原创 第十四届蓝桥杯省赛C++B组D题【飞机降落】题解(AC)
这道题目要求我们判断给定的飞机是否都能在它们的油料耗尽之前降落。为了寻找是否存在合法的降落序列,我们可以使用深度优先搜索(DFS)的方法,尝试所有可能的降落顺序。通过以上步骤,我们可以找出是否存在一个合法的降落序列,使得所有的飞机都能在它们的油料耗尽之前降落。首先,我们需要理解题目中的条件。时刻到达机场上空,剩余油料可以维持。这意味着每架飞机可以在。个单位时间,降落需要。的时间段内开始降落。
2024-07-01 16:21:31 1374
原创 第十四届蓝桥杯省赛C++A组F题【买瓜】题解(AC)
对于每一部分,求出所有可能的瓜的重量组合以及对应的劈开的瓜的个数。同时,由于每个瓜可以选择劈或者不劈,所以我们可以使用深度优先搜索(DFS)来遍历所有可能的组合。题目要求我们在给定的瓜中选择一些瓜,可以选择将瓜劈成两半,使得最后的总重量恰好等于。本题要求从给定的瓜中选择一些瓜,可以对瓜进行劈开,使得最后选出的瓜的总重量恰好为。,又由于哈希表的常数过大,会导致程序缓慢,故无法通过所有数据。在深度优先搜索的过程中,我们需要记录当前考虑到的瓜的序号。在深度优先搜索的过程中,我们需要记录当前考虑到的瓜的序号。
2024-07-01 15:46:34 1444
原创 第十四届蓝桥杯国赛PythonB组B题【弹珠堆放】题解(AC)
拆成两个子数组,要求两个数组的和要尽可能接近。进行爆搜,编码难度较大,较容易出错。我们来考虑一下,什么情况下可以使得。确认哪些和是可以被构建出来的。所以,现在任务转换为,将数组。个数,能否凑出一个和为。另外本题可进行空间优化。
2024-05-16 21:33:46 781
原创 第十五届蓝桥杯省赛第二场PythonB组B题【逆序对期望】题解(AC)
用归并排序计算数组的逆序对,时间复杂度。枚举所有的可能的交换情况,时间复杂度。
2024-04-25 15:16:33 388 3
原创 第十五届蓝桥杯省赛第二场PythonB组A题【进制】题解(AC)
进制过程中,若出现余数大于。进制一定要用字母进行表示。按照题意进行模拟,计算。
2024-04-25 15:00:09 448 1
原创 第十五届蓝桥杯省赛第二场C/C++B组H题【质数变革】题解
个操作,如果每个操作都是遍历完成模拟,若有较多的。好的,接下来我们考虑,数组不全是由质数组成的情况。的质数越界,故可以在线性筛时,额外多筛些许。个位置,再特判边界,即可解决问题。我们发现,当数组不全是由质数组成时,的质数,我们可以使用二分算法实现。预处理时,记录下质数的位置,例如。另外需要注意的点,当最终整数大于。首先,我们考虑一下整个数组都是由。个时,如果我们可以知道质数。进行一并处理,例如有一个。个质数就向右(向左)移动。,故在调用函数之前,需要对。,而我们的质数数组不存在。,那么就可以一并处理。
2024-04-24 11:29:32 1557 5
原创 第十五届蓝桥杯省赛第二场C/C++B组G题【最强小队】题解
我们尝试枚举右端点,当一个点作为右端点时,那么,该点可能是最大值,也可能是次大值,较难实现。进行查找左侧第一个大于自己的下标,以及右侧第一个大于自己的下标。,那么他俩一定可以构成一个区间,区间大小为。枚举所有可能的左端点、右端点,时间复杂度。对于每个区间进行遍历检测,时间复杂度。尝试枚举每个点作为次大值点,那么,若。作为次大值点,我们需要做的就是,找出。,所以肯定只能进行一次枚举。同理,可以找出右侧第一个。
2024-04-24 01:17:10 1459 4
原创 第十五届蓝桥杯省赛第二场C/C++B组F题【狡兔k窟】题解(AC)
的边,故上述最短路算法存在多余开销,我们考虑使用。每个点隶属于一个集合,同一个集合的点可以互相传送。的边,则放入队头,反之放入队尾。观察发现,本题仅存在边权为。条边的无向图,边权均为。算法进行求解,并使用。进行扩展时,若是边权为。
2024-04-23 20:46:01 1599
原创 第十五届蓝桥杯省赛第二场C/C++B组E题【遗迹】题解(AC)
遍历效率较低,可以考虑先将字符串进行预处理,将字符。贪心:每次都移动至当前最近的对应方块上。首先,我们注意到数据范围的最后一句话,答案与逾期不符合,故贪心解法不正确。,那么这样每个字符的数量约为。查找一种字符的位置时,
2024-04-23 10:28:23 1173 2
原创 第十五届蓝桥杯省赛第二场C/C++B组D题【前缀总分】题解(AC)
那么显而易见,我们需要计算修改之后的第。左侧的字符,以及右侧的字符均为改变。所以我们可以计算出未修改时的总得分的。那么接下来,我们要尝试处理计算,将第。,处理修改以及计算总分的复杂度为。的时间去完成计算一个枚举的分数。上述分析中,我们多次需要用到第。来优化求两个字符串的最大前缀。那么我们可以尝试比较修改前的。枚举所有方案的时间复杂度为。的所有方案,时间复杂度。中的枚举方式——所有将第。个字符串对答案的贡献为。,那么修改之后的答案即为。时,所影响答案的只有。个字符串对答案的贡献。个字符串对答案的贡献。
2024-04-22 02:04:57 1091
原创 第十五届蓝桥杯省赛第二场C/C++B组C题【传送阵】题解(AC)
从任意点开始,如果能进入一个循环,一定可以将整个循环的宝藏都拿走,因为不限进入传送门的次数。来维护点与点直接的关系,以及一个小团体里头点的数量。一定会构成几个点的循环,或者是几个单独的点。的位置,那么我们可以枚举所有的。由于我们可以使用一次从。
2024-04-21 19:18:52 3813
原创 第十五届蓝桥杯省赛第二场C/C++B组B题【逆序对期望】题解(AC)
用归并排序计算数组的逆序对,时间复杂度。枚举所有的可能的交换情况,时间复杂度。
2024-04-21 15:47:17 764
原创 第十五届蓝桥杯省赛PythonA组B题【召唤数学精灵】题解
的情况,再计算题目给出的区间内,有多少个。综上,我们可以先手动模拟计算。我们得知,一个长度为。
2024-04-21 10:01:07 933
原创 第十五届蓝桥杯省赛PythonA组D题【回文数组】题解(AC)
根据贪心的思想,如果第一个元素需要执行操作,那么我们可以看下一个元素是否需要同步进行操作,如果操作后对结果更优则执行,反之跳过。即数组中的第一个元素,要等于最后一个元素,第二个元素,要等于倒二个元素,所以我们的目标转换为,操作前一半元素,使得数组变为回文数组。,随后可以选择左边的元素或右边的元素进行同样操作。那么,假设操作第一个元素和第二个元素。我们可以计算出前一半元素只执行操作。,因为这样对操作次数是不影响的。使数组变为回文数组的操作次数。,相当于操作倒数两个元素。可以看作先执行一次操作。
2024-04-20 23:45:35 1012
原创 第十五届蓝桥杯省赛PythonA组A题【拼正方形】题解(AC)
我们发现,奇数具有单调性,偶数就有单调性,故可以分成两次二分,一次二分所有的奇数,再一次二分所有的偶数,最后取最大值即可。第一反应是二分,大的正方形可以拼出来,小的就可以拼出来,更大的不一定可以拼出来,但是其实是错误的,以下给出反例。的方块,问能拼出的最大正方形的边长为多少。故本题不具有单调性?
2024-04-20 23:44:29 829 1
原创 第十五届蓝桥杯省赛C/C++C组G题【挖矿】题解(AC)
点开始枚举向左(右)走到的所有位置的左侧(右侧)的价值,再加上使用剩余体力向反方向走带来的价值。根据贪心的策略,转弯次数两次及以上的方案一定不是最优解。开始,每走一格消耗一点体力,问能收集宝藏的最大值。转弯一次和零次的方案才可能是最优解。个点有宝藏,你需要从。的区间价值和的计算。
2024-04-18 00:44:11 519
原创 第十五届蓝桥杯省赛C/C++C组F题【商品库存管理】题解(AC)
因此,我们可以执行所有的操作,对物品的数量进行判定,若执行所有操作之后的物品数量为。个区间的区间加操作,并用差分算法进行优化,时间复杂度。我们可以找出所有的符合执行所有操作后的物品的数量为。,那么说明,有且仅有一个操作的区间包含了这个物品。个操作,其他操作正常执行,有多少个物品数量为。个操作的情况下,有哪些物品的数量会为。个区间,问区间内有几个元素。枚举不执行的区间,执行剩余。我们先来思考一下,不执行第。那么问题转换为:给定。
2024-04-18 00:34:29 1216 14
原创 第十五届蓝桥杯省赛C/C++C组E题【回文数组】题解(AC)
根据贪心的思想,如果第一个元素需要执行操作,那么我们可以看下一个元素是否需要同步进行操作,如果操作后对结果更优则执行,反之跳过。即数组中的第一个元素,要等于最后一个元素,第二个元素,要等于倒二个元素,所以我们的目标转换为,操作前一半元素,使得数组变为回文数组。,随后可以选择左边的元素或右边的元素进行同样操作。那么,假设操作第一个元素和第二个元素。我们可以计算出前一半元素只执行操作。,因为这样对操作次数是不影响的。使数组变为回文数组的操作次数。,相当于操作倒数两个元素。可以看作先执行一次操作。
2024-04-17 21:19:07 1302
原创 第十五届蓝桥杯省赛C/C++C组A题【拼正方形】题解(AC)
我们发现,奇数具有单调性,偶数就有单调性,故可以分成两次二分,一次二分所有的奇数,再一次二分所有的偶数,最后取最大值即可。第一反应是二分,大的正方形可以拼出来,小的就可以拼出来,更大的不一定可以拼出来,但是其实是错误的,以下给出反例。的方块,问能拼出的最大正方形的边长为多少。故本题不具有单调性?
2024-04-16 15:04:28 503
原创 第十五届蓝桥杯省赛PythonC组F题【挖矿】题解(AC)
点开始枚举向左(右)走到的所有位置的左侧(右侧)的价值,再加上使用剩余体力向反方向走带来的价值。根据贪心的策略,转弯次数两次及以上的方案一定不是最优解。开始,每走一格消耗一点体力,问能收集宝藏的最大值。转弯一次和零次的方案才可能是最优解。个点有宝藏,你需要从。的区间价值和的计算。
2024-04-16 00:02:24 519
原创 第十五届蓝桥杯省赛PythonC组E题【回文数组】题解(AC)
根据贪心的思想,如果第一个元素需要执行操作,那么我们可以看下一个元素是否需要同步进行操作,如果操作后对结果更优则执行,反之跳过。即数组中的第一个元素,要等于最后一个元素,第二个元素,要等于倒二个元素,所以我们的目标转换为,操作前一半元素,使得数组变为回文数组。,随后可以选择左边的元素或右边的元素进行同样操作。那么,假设操作第一个元素和第二个元素。我们可以计算出前一半元素只执行操作。,因为这样对操作次数是不影响的。使数组变为回文数组的操作次数。,相当于操作倒数两个元素。可以看作先执行一次操作。
2024-04-15 22:39:40 1137 1
原创 第十五届蓝桥杯省赛PythonC组A题【拼正方形】题解(AC)
我们发现,奇数具有单调性,偶数就有单调性,故可以分成两次二分,一次二分所有的奇数,再一次二分所有的偶数,最后取最大值即可。第一反应是二分,大的正方形可以拼出来,小的就可以拼出来,更大的不一定可以拼出来,但是其实是错误的,以下给出反例。的方块,问能拼出的最大正方形的边长为多少。故本题不具有单调性?
2024-04-14 22:09:06 1550 8
原创 第十五届蓝桥杯省赛C/C++B组H题【拔河】题解(AC)
由于枚举三个点肯定会超时,所以只能枚举两个点,我们尝试枚举第一个区间。的复杂度,需要找出右区间中和左区间的和最相近的值,可以考虑使用。一开始,我们将所有可能的右区间的区间和,都插入。做法同上,用前缀和优化数组求和的过程。的数组和差值最小是多少,其中。递增进行枚举左区间,当。的数组,求两个子数组。为左端点的区间的和。
2024-04-14 20:36:16 3366 3
原创 第十五届蓝桥杯省赛C/C++B组F题【数字接龙】题解(AC)
的上方和右方是否被访问而禁止移动,显然不合理,在本样例中。移动未产生交叉,为允许操作,故判断相邻点是否访问方案错误。时,我们可以判断 $1 的移动方向是否为。进行移动时,如果是通过判断。
2024-04-14 00:31:12 1279 14
原创 第十五届蓝桥杯省赛C/C++B组D题【R格式】题解(AC)
上述温柔舍去小数点后得到答案,较难实现,相对法二较为复杂,此处不展开。四舍五入舍去小数后的结果。
2024-04-13 22:21:28 1534 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人