- 博客(18)
- 收藏
- 关注
原创 2025牛客多校第六场D题解
及位于同一列的差分元素单调不增,又因为题目所说的每行元素单调不减,也就相当于每行的差分元素均大于0,而给个元素小于。个盒子的方案数,多出来的一个盒子是用来存放不需要的小球的,也就相当于前面的放入方法,那么总的方案数为。对于上述式子通过递推的方式已经可以过了,当然也可以对其进行进一步的更改,相当于将。,因为每一列的求解是相互不会影响的,那么我们就可以想到将 0 到。份,然后对于每个分配的值再进行上述的分别隔板,其方案等价于将。,用隔板法的思想进行求解,那么方案数为。的和,换句话说,设第一行的数组。
2025-08-01 19:46:49
1057
原创 P4597 序列 sequence题解
2.对于当前的最大值,要么是把当前值换成最大值,要么是将最大值换成当前值,如果最大值比较多的话,那么就是将当前值换成最大值,但无论怎么样,对结果的贡献都是一致的,且也具有返回贪心的特点。中间的任意数,两数的转移贡献都是一致的,那么对于后面的贡献,一定是将最大数变成当前的数更好,当然其课调整性,只要后面的数不小于。给定一个数列,每次操作可以使任意一个数+1或-1,求小的操作次数,使得数列变成不降数列.,那么我们就可以在一定的限度内对两数进行调整,使得满足后面序列的安排。
2025-07-11 22:16:23
411
原创 linux的用户和权限(学习笔记
暑期实训要用到linux系统,所以看黑马的视频并做了些学习笔记来加深一下理解,其中也有我个人的一些理解,也希望这篇博客能够帮助到大家。
2025-07-10 17:03:52
572
原创 题解:P1484 种树
中,并将第5个点重新赋值为左右端点的和减去第五个端点的权值,因为当选取了某个端点后就不能选取其左右两个端点了,而当某一个值的左右两点加起来比该值还大,且其他位置没有更大值时,就要取该点的左右端点,并去除掉该点的权值,这样就是反悔贪心,并将该值和该值的位置重新放回大根堆中进行维护。之后就是将该选取的点的左右端点进行删除,并链接左端点的左端点以及右端点的右端点,如下图,让3,5节点的端点相互指向,让5,7节点的端点相互指向。然而,此题的数据范围比较的大,因此我们需要使用到链表以及返回贪心的做法。
2025-07-10 11:01:29
905
原创 F. Knapsack题解
前言:今天和队友vp了一下2025 ICPC 武汉邀请赛 ,被这道F题恶心坏了,来写篇题解缓解一下焦躁的心情。则直接 break 掉就可以了,如果跨度很大且有高位的空余数,则也可以直接 break 掉。为前面所有数的总和,以这样的方式初始化,便于后面减少时间复杂度。就表示当前位所多出的空位,如果当前多出来的空位大于等于。对于此题,可以采用最高位补齐的方法,用。表示当前位与上一位的倍数差,数组来表示前面总和的最小。来表示前面高位所剩于的数,
2025-07-02 21:31:54
1086
原创 P2107 小Z的AK计划 题解
小Z需要沿着机房一条街行走,可以选择进入机房AK(解题),目标是在给定的时间。内最大化AK的机房数量。本解法通过贪心策略和高效的数据结构,在。时间内解决了问题,适用于最大数据规模。移动速度为1,因此从位置。
2025-06-23 10:08:49
689
原创 树状数组的4个应用
2.如果使用差分的方式的话,也能使树状数组能够进行区间修改和单点查询,但本质还是单点修改和区间查询。4.同时,树状数组也可以通过二维树状数组来使用,通过矩形的区间加以及查询时矩形的区间和来进行。3.通过数学公式推导,也能使得树状数组发挥线段树得作用,能够进行区间修改和区间查询。树状数组是一个高效处理前缀和的数据结构,用于。例题:[P4514 上帝造题的七分钟](的时间复杂度进行区间求和.1.涉及单点修改和区间查询。
2025-06-21 09:46:05
723
原创 P2880 [USACO07JAN] Balanced Lineup G 题解
本题通过ST表高效解决了区间最值查询问题,展示了倍增思想在预处理和查询中的应用。掌握ST表的原理和实现,对解决静态RMQ问题和LCA(最近公共祖先)问题有重要意义。
2025-06-20 09:54:10
1252
原创 元旦晚会(P1986)题解
我们需要在一条直线上选择最少的点,使得每个给定的区间内至少有指定数量的点。例如,输入样例中的五个区间需要至少 3、3、1、1、1 个点,最终答案是 6 个点。这道题是一个典型的区间覆盖问题,目标是用最少的点覆盖所有区间,且每个区间内的点数量不少于给定的最小值。关键在于如何选择点的位置,使得它们能被尽可能多的区间共享,从而减少总点数。:按区间右端点排序确保我们优先处理较早结束的区间,这样可以尽可能地让点被后续区间共享。,每个区间处理的时间复杂度为 O (log n),因此总的时间复杂度为。
2025-06-19 15:20:08
1216
原创 Manacher算法
时间复杂度内求解最长回文子串问题。其核心思想是利用回文串的对称性避免重复计算,通过动态维护当前最右回文边界来优化搜索过程。Manacher算法用于在。:将原字符串转换为奇数长度。对应原串最长回文子串长度。级别的字符串时,务必使用。
2025-06-18 20:53:01
1333
原创 CF2115A Gellyfish and Flaming Peony题解
解法:这道题可以用 dp 来写,但我用的是 BFS,题目的问题就是对于一个给定的数组,如何用最小的次数使得整个数组变为整个数组的最大公约数 cn,显然,当数组中存在 ans 个数是最大公约数时,整个数组的修改次数为 n−ans。但当数组中不存在这样的最大公约数时,问题就转换为了如何用最少的元素使得这些元素的最大公约数为 cn,可以采用 BFS 的方法,用 vector 容器存储每次更改后的值,为了减少时间复杂度,需要对每次的操作进行元素的去重,因为数据范围比较小,大常数也能过,代码如下。
2025-06-17 16:33:25
440
原创 P1905 堆放杂物题解
思路:采用贪心思路,用最小根堆维护一个最小值,每次把当前值放入到最小根堆中,依次进行,可以证明,这样的结果最大堆和最小堆的差值一定是不大于3的,因为假设要加入的数字为3,要想使得最小堆与最大堆的差值大于三,一定是将数字3放入最大堆中才行,可这样又与已知的操作行为矛盾,因此贪心策略成立,同时为了避免插入的物体重量大小的无序,我们可以将物品从大到小排序。
2025-06-17 09:35:16
415
原创 2025年第十六届蓝桥杯国赛CB组题解(个人版
前言:该篇题解并非官方题解,是我当时AC了部分题的以及赛后补题后,对于每道题的一些解法的自我认知,一方面是巩固自己对大赛知识的理解,另一方面也是为了给其他像我一样的蒟蒻清晰的解释。(为什么只有5道题呢,因为后面的题目有点难,蒟蒻还没补完T_T,不过会尽快的题目描述:有2025个连续的格子,每个格子都可以填入一个数字,求有多少个序列,使得任意两个相邻格子中的数字,其最小公倍数(LCM)均为 2025。并将结果对 10910^9109+7取模。解法:由于2025可以分解为 34∗523^4*5^234∗52 ,
2025-06-16 11:33:15
2963
9
原创 贪心好题(经典模型题)
贪心思路:易知,对于一段有起点和终点的路程,该路程是不能省略的,则需要考虑如何减少司机接单的空载时间,将起点和终点排序,并将0和终点m加入到数组中,易知终点到对应序列的起点的间隔的路程差最短,因为后面的终点肯定比当前的终点更远,现在不用对应起点,后面再用可能不亏但一定不赚,因此贪心思路证明完成。解法:可以知道,每次交换相邻元素时,前一个元素值-1,下标+1,后一个元素值-1,下标+1,可以知道其元素值加下标的总数是不会变的,可以弄一个。数组的值相同时,不存在一个排列能满足要求,否则,输出。
2025-06-13 14:58:33
944
原创 CF2115A Gellyfish and Flaming Peony题解
当如果数组中不存在这样的最大公约数时,问题就转换为了如何用最小的操作次数求得 cn ,这里可以用 BFS 来求解,对于每次操作后得到得数据存入到 vector 容器中,并对该数据进行排序加去重,使得下次得 BFS 的复杂度减少,当出现这样的数据为最大公倍数时,就退出循环,这样可以做到不重不漏,因为就算是之前已经添加过的元素在进行添加也不会改变最终的结果,题目描述:给定一个数组,任取两个数,并将其中一个数变为这两个数的最大公约数,求将整个数组元素相等的最小操作次数。,则操作的最小次数为 n-ans。
2025-06-13 12:02:40
544
原创 巴什博弈(P4101 [HEOI2014] 人人尽说江南好
1,m为偶数,先手先将两个 1 合并为 2(下面称该堆为大堆) ,后手只有两个选择,将 1 放入那个大堆,或者也将两个 1 合并为 2 ,如果是前者,那么先手只需要将一个 1 合并到大堆即可,如果是后者,那么只需要将那个 2 合并到大堆即可,可知,大堆的石子个数一定是成偶数倍增加的,及一定能组成大堆。2,m 为奇数,则要将大堆的个数维持在先手为奇数的情况,及当大堆为偶数时,先手要主动合并 1 到大堆中,之后再将后手创建的 2 合并到大堆中,当大堆为奇数堆时,则要将已有的偶数堆合并进去,或者创建偶数堆。
2025-06-11 16:13:16
624
1
原创 AT_abc408_d [ABC408D] Flip to Gather题解
此时总操作次数为 cnt+b[r]−b[l],但复杂度 O(n^2) 仍无法通过。总操作次数 =(区间长度)+(总的数字 1 的个数)- 2 *(区间内 1 的个数)。你的目标是让 S 中的 1 连续或 S 中不存在 1。请找出需要的最小的操作次数。枚举左端点 l,利用 c 数组快速得到最小化的 b[r]−b[l] 值。构建后缀最小值数组 c[i],其中 c[i]=minj≥ib[j]。用 b[i] 维护 b[i] = i - 2 * a[i]。给你一个长度为 N 的、由 0 和 1 构成的字符串 S。
2025-06-07 11:10:04
565
2
使用qt5和C++代码完成的学生成绩管理系统
2025-07-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅