自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大三计算机在读,分享我的算法之路

细心发现,大胆猜想,敢于运用,不用证明!

  • 博客(71)
  • 收藏
  • 关注

原创 【算法】最长公共子序列(C/C++)

简称(LCS),是动态规划里面里面的基础算法它的所解决的问题是,在两个序列中找到一个序列,使得它既是第一个序列的子序列,也是第二个序列的子序列,并且该序列长度最长。由下图中两个序列,我们可以看出来最长公共子序列为[s c r g]。我们来举个“”,比如序列A为“abcdef”,序列B为“bcef”,那么它的最长公共子序列为序列B,即:“bcef”,注意最长公共子序列不用保证每一个字符必须连续。那么我们一般的暴力做法是什么呢?

2024-09-20 10:50:16 1106 142

原创 大一新生以此篇开启你的算法之路

各位大一计算机萌新们,你们好,本篇博客会带领大家进行算法入门,给各位大一萌新答疑解惑,请不要错过。算法竞赛是一个很好的机会,希望各位大一新生把握此次机会,好好的体验一把,过了这个村就没这个店了。写此篇博客的目的是为了帮助大一新生进行算法入门解答,希望学弟学妹们少走博主走过的弯路。

2024-09-13 11:11:55 2423 243

原创 小小GCD、LCM拿下拿下

GCD、LCM是算法当中的基础之基础,分别对应最大公约数、最小公倍数,在算法竞赛中涉及到的概率也是比较高的,GCD、LCM在小学时就涉及到了求法,本篇将给大家详解GCD、LCM这两个函数,并且提供最简单的模板,在考察时,直接背上即可。

2024-09-10 12:00:39 1623 223

原创 一篇带你速通差分算法(C/C++)

差分算法是一种在计算机科学中常用的算法,特别是在处理序列数据时,它可以帮助我们快速计算出序列中相邻元素的差值。时间复杂度可以达到O(1),在C++中实现差分算法不仅可以提高程序的效率,还可以简化代码的复杂度。本文将详细介绍差分算法的原理、C++实现方法以及算法例题。

2024-09-07 11:57:16 2450 225

原创 一篇带你速通前缀和算法(C/C++)

前缀和是一种常见的算法计算技巧,通常用于处理数组或序列的连续子区间求和问题。它可以帮助我们在 O(1) 的时间内计算出指定子区间的和,而不需要每次都遍历整个子区间。前缀和一般用于预处理当中,具有高效率的特点。

2024-09-04 11:57:04 1361 213

原创 详解树状数组(C/C++)

树状数组(Binary Indexed Tree,简称BIT或Fenwick Tree)是一种用于高效处理数据序列的算法数据结构。它能够支持两个主要操作:单点更新和区间求和,这两个操作的时间复杂度都能达到O(log n),其中 n是数据序列的长度。树状数组非常适合处理那些需要频繁更新和查询区间和的问题。

2024-09-01 12:01:34 1570 115

原创 弗洛伊德(Floyd)算法(C/C++)

弗洛伊德算法(Floyd's algorithm),又称为弗洛伊德-沃尔什算法(Floyd-Warshall algorithm),是一种用于在加权图中找到所有顶点对之间最短路径的算法。这个算法适用于有向图和无向图,并且可以处理负权重边,但不能处理负权重循环。

2024-08-28 15:18:54 2159 239

原创 迪杰斯特拉(Dijkstra)算法(C/C++)

迪杰斯特拉(Dijkstra)算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格·迪科斯彻(Edsger Dijkstra)在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。

2024-08-19 12:02:02 3751 213

原创 数据结构与算法——BFS(广度优先搜索)

广度优先搜索(Breadth-First Search,简称BFS)是一种遍历或搜索树和图的算法,也称为宽度优先搜索,BFS算法从图的某个节点开始,依次对其所有相邻节点进行探索和遍历,然后再对这些相邻节点的相邻节点进行探索,直到遍历完所有的节点。

2024-08-17 11:47:21 2612 187

原创 数据结构与算法——DFS(深度优先搜索)

深度优先搜索(Depth-First Search,简称DFS)是一种用于遍历或搜索树或图的算法。这种算法会尽可能深地搜索图的分支,直到找到目标节点或达到叶节点(没有子节点的节点),然后回溯到上一个分支继续搜索。

2024-08-13 13:52:30 5033 200

原创 C/C++字符串函数

在一些程序里面我们将会进行一系列的字符串操作,这些操作可以用一些函数进行简单的实现,对写代码效率和代码可读性具有重要意义。

2024-08-11 21:22:12 1519 29

原创 最大子矩阵(C/C++)

最大子矩阵问题是指在一个矩阵中找到一个子矩阵,使得该子矩阵的元素之和最大。解决该问题的常用方法是使用动态规划。先计算出每一行的前缀和,然后对于每一列的起始和终止位置,计算出该区域内每一行的和,得到一个一维数组。再对该一维数组使用动态规划求解最大子数组和的问题,得到最大子矩阵的元素之和。

2024-08-10 13:05:52 1231 152

原创 C/C++数字与字符串互相转换

C/C++中数字与字符串类型转换大全,具有多种方法,总有一个会让你喜欢

2024-08-08 19:40:57 3079 66

原创 Codeforces Round 963 (Div. 2)

Codeforces Round 963 (Div. 2) A—C题详解

2024-08-07 20:48:29 1201 15

原创 详解贪心算法

贪心算法是一种在求解最优化问题时采取的一种常用算法策略。贪心算法的基本思想是,每次选择当前情况下的局部最优解,并相信这个局部最优解能够导致全局最优解。

2024-08-06 11:52:27 3408 63

原创 详解C/C++输入输出

C/C++输入输出很多,在不同的情况会有不同的输入输出,C/C++有哪些常用的输入输出,在什么时候用它们,这篇博客我们一一详解。

2024-08-04 09:00:06 1734 77

原创 你真的懂二分吗?

首先判断到任意一个1无论在什么位置,比如说在第二个1,那么check(mid)条件是成立的,我就更新左端点把范围给到右区间,让他去找最右边的1,不断去找... 当判断到最后一个1时,再更新l==r了,此时就退出循环了,也就找到答案了。像1,1,2,2,2... 这种如果想找到最小的数且靠右边的数,以上模板可能比较难实现。数组==[1,1,1,1,2,2,2,3...],想要查找最右边的1,就是第四个1,如果用上面的模板,它查到一个1就立马返回了,不管你是哪一个1,取决于你的左右边界了。

2024-08-02 11:02:02 1823 98

原创 Codeforces Round 962 (Div. 3)

Codeforces Round 962 (Div. 3) A--D题解

2024-07-29 10:18:41 1309 33

原创 Codeforces Round 960 (Div. 2)

比如最大数的个数为2个,第二大的个数为3个,爱丽丝先拿第二大的数,鲍勃拿第二大的数,爱丽丝再拿第二大的数,由于条件限制鲍勃只能拿最大的数,最大的数还剩余1个最后被爱丽丝拿走,爱丽丝获胜。题中最大前缀和下标大于最大后缀和下标,说明两者有重合的部分,这一部分都是必然走的,总和一定是大于0的,不妨我们把它们都置为1,再分为[1,y-1]、[x+1,n],这两个区间对总和起副作用,一定是小于0的,我们按照 -1 1的顺序给其赋值,如果是偶数个,那么总和为0不起作用,如果是奇数个,总和为-1,也可以满足条件。

2024-07-24 14:59:46 1729 31

原创 Codeforces Round 942 (Div. 2)

在第四个测试用例中, (1,1),(2,1),(2,2),(3,1),(4,1),(5,1),(6,1),(6,2),(6,3),(7,1),(8,1),(9,1),(10,1),(10,2) 满足条件。重新排列的得分是长度为 n 的(连续)子数组的数量,这些子数组是 [1, 2, ..., n] 的排列组合。还有一个商店,里面有无限量的各种类型的卡片。每个测试用例的第一行包含两个整数 n , k ( 1<= n <=2 *10^5 , 0<=k<=10^12 )不同类型纸牌的数量和硬币的数量。

2024-07-22 11:07:42 1645 20

原创 【算法解题思想】动态规划+深度优先搜索(C/C++)

洛谷 P1021 邮票面值设计

2024-04-25 07:00:00 1398 21

原创 单调队列(C/C++)

单调队列是一种非常有用的数据结构,可以高效地解决需要维护窗口内最值的问题。使用单调队列的时间复杂度为O(n),其中n为输入数组的长度。t=N7T8t=N7T8t=N7T879. 滑动窗口的最大值 - AcWing题库高质量的算法题库https://www.acwing.com/problem/content/description/75/滑动窗口 /【模板】单调队列 - 洛谷https://www.luogu.com.cn/problem/P1886。

2024-04-18 00:18:37 882 45

原创 单调栈(C/C++)

单调栈在题目中应用很广泛,是一名算法选手所必须掌握的基础算法,在题目中遇到寻找最大最小的元素,或者对元素进行找最大最小的问题可以考虑单调栈,单调栈主要适用于一些需要找到“下一个更大(或更小)元素”的问题。通过维护一个单调递增(或递减)的栈,可以高效地找到下一个更大(或更小)元素。在实际应用中,需要注意栈的边界条件及特殊情况的处理。单调栈的时间复杂度通常为O(n),其中n为元素的个数。利用单调栈可以在题目规定的时间可以解决问题。

2024-04-16 17:20:53 1563 62

原创 AcWing 1371. 货币系统(每日一题)

这道题纯纯就是模板题了,就是背包dp求方案数的一个模板,做acwing蓝桥杯每日一题以来,从来没有见过这么简单的题,话不多说,直接上代码!这就是之前一直做的题像之前货币系统、换零钱等,在目前来看还是比较重要的,好好复习一边阿吧。现在,要你用这 V 种货币凑出 N 元钱,请问共有多少种不同的凑法。接下来的若干行,将一共输入 V 个整数,每个整数表示一种货币的面值。给定 V 种货币(单位:元),每种货币使用的次数不限。不同种类的货币,面值可能是相同的。输出一个整数,表示所求总方案数。

2024-04-11 17:05:06 455 10

原创 AcWing 1388. 游戏(每日一题)

这道题跟蓝桥杯练习系统的一个题很像,但好久没有写了,也忘记思路的,区间DP感觉很难理解,代码倒是很简洁。y总讲的是另一种定义,dp的含义是先手玩家与后手玩家分数的差值,虽然好理解一点,但是这种定义一般是想不出来的,这里就用了最一般的定义去写的,望大家理解。

2024-04-07 17:37:08 1083 25

原创 第十四届蓝桥杯省赛大学C组(C/C++)填充

它前一位三种情况0,1,?,当前一位为0、1或?时可以凑成字串,dp[i]=dp[i-1]+1,否则无法凑成字串dp[i]=dp[i-1]。1.如果当前位置为0,它前一位三种情况0,1,?时可以凑成字串,dp[i]=dp[i-1]+1,否则无法凑成字串dp[i]=dp[i-1]。2.如果当前位置为1,它前一位三种情况0,1,?时可以凑成字串,dp[i]=dp[i-1]+1,否则无法凑成字串dp[i]=dp[i-1]。主要利用动态规划思想,定义一个dp[i]表示遍历到第i个位置的最大字串个数。

2024-04-07 07:00:00 714 13

原创 第十四届蓝桥杯省赛大学C组(C/C++)三国游戏

题目中说X>Y+Z时,会有获胜,那么就会有三种情况,魏蜀吴三个国家,三种情况,当魏国获胜时会有X>Y+Z,那么就是X-Y-Z>0,每一个事件发生对于魏国胜利判定就为Xi-Yi-Zi>0,每一个事件发生就用w[i]记录值,对w[i]进行由大到小的排序,从开始不断取数,当取到<0时,就是分界线,它前面的就都是>0的情况,即为魏国胜利的最大值。当蜀国胜利时,会有Y>X+Z,即Y-X-Z>0,每一个事件发生用w[i]记录,排序找分界点即可,吴国同理,最后在三个国家寻找最大值即可。输入的第一行包含一个整数 n。

2024-04-06 19:00:00 5052 6

原创 AcWing 312. 乌龟棋(每日一题)

此种状态定义博主第一次遇到,最多的也就见过三维解决问题,像李白打酒,这个题状态的定义与描述很难想,开始寻思暴力能不能多拿点分,只能过两个样例,^—^,后来看了y总讲解,才知道用四维去定义,还是要多做题,DP问题只要能找到状态转移方程就基本解决了,博主感觉最难的还是状态的定义与描述。多做题积累经验,文章代码实现或者思路有错误的地方,请各位大佬指出,感激不尽*~*。yxc。

2024-04-06 06:00:00 951 10

原创 第十四届蓝桥杯省赛大学B组(C/C++)整数删除

这里需要判断一下,由于更新值在原数组中更新,优先队列中的值没有被更新,每次进入循环,先要进行判断原数组的值是否与优先队列中的值相等,不相等就更新,相等就按照删除继续操作,k--每次选择数列中最小的整数(如果最小值不止一个,选择最靠前的),将其删除,并把与它相邻的整数加上被删除的数值。对于 100% 的数据,1≤K<N≤5×10^5,0≤Ai≤10^8。输出 N−K个整数,中间用一个空格隔开,代表 K 次操作后的序列。对于 20% 的数据,1≤K<N≤10000。输出 K 次操作后的序列。

2024-04-05 16:19:50 2006 4

原创 AcWing 731. 毕业旅行问题(每日一题)

此题对于博主这样的cj来说比较难了,都是按照博主自己的理解去写的,会有一些不是很准确的地方,学了很长时间,似懂非懂的感觉,大佬勿喷。主要还是状态的定义利用二进制去标记那个地方第一次见,感觉很巧妙,再就是写代码中不经常使用位运算对于y总的代码看起来也比较困难,还有很多地方需要好好学习一次,感觉跟着y总的每日一题学到了不少东西,以后还需继续加油,文章若有错误的地方请各位大佬指出,一起学习进步。PS:第一张图片来组y总讲解 作者:yxc。

2024-04-04 21:16:01 972 13

原创 AcWing 1265. 数星星(每日一题)

此题理解了题意,直接利用树状数组模板就可以解决,难点在理解上,树状数组不用去懂得原理,背好模板,记得在单点修改和区间查询上时间复杂度很低即可。树状数组时一个重要的数据结构很好用,比线段树简单,可以学一下,文章尚有不足,有错误请各位指出。

2024-04-03 22:56:24 578 16

原创 第十四届省赛大学B组(C/C++)子串简写

那么我们怎么求方案数,当我们遍历到第i个位置上的首字符时,题目中要求最短字串为N,那么我们再往后走N-1个,第N-1个及到最后凡是有尾字符的都是一种情况,那么方案数就是presumb[s.zize()-1]-presumb[i+n-2],下面以i=2为例。我们定义前缀和presumb[i]表示第i个位置之前(包括第i个位置)有多少个b,这样确定了尾,我们再遍历一遍只要是头,那么就可以利用前缀和求出方案,以下为样例为例。对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。

2024-04-03 19:58:41 1166 1

原创 第十四届省赛大学B组(C/C++)岛屿个数

这不是普通的DFS/BFS搜索题,看着很像最少连通块,但是题目中又有了新的定义就是在陆地环里面(被陆地包围)也算属于此外围岛屿,那么我们就也要判定这种环岛屿,博主的思路是先BFS也可DFS找出连通块的个数(四个方向),建一个vector把连通块的起点存进去,方便去找环岛屿,只要有一个起点(或者此连通块任意一个点),此连通块的点便可通过移动一网打尽,再BFS(或者DFS)判定该岛屿是否属于这种环岛屿,不属于就结果加一,属于就不用加。对于 100% 的评测用例,1≤T≤10,1≤M,N≤50。

2024-04-01 22:49:16 1296 8

原创 第十四届省赛大学B组(C/C++)接龙数列

例如 12,23,35,56,61,1112,23,35,56,61,11 是接龙数列;12,23,34,5612,23,34,56 不是接龙数列,因为 56 的首位数字不等于 34 的末位数字。对于一个长度为 K 的整数数列:A1,A2,...,AK我们称之为接龙数列当且仅当 Ai 的首位数字恰好等于 Ai−1 的末位数字 (2≤i≤K)。现在给定一个长度为 N 的数列 A1,A2,...,AN,请你计算最少从中删除多少个数,可以使剩下的序列是接龙序列?第二行包含 N 个整数 A1,A2,...,AN。

2024-03-31 16:39:27 1041 6

原创 AcWing 1413. 矩形牛棚(每日一题)

数据结构]---单调栈-CSDN博客[数据结构]——单调栈-CSDN博客AcWing 1413. 矩形牛棚(每日一题)_哔哩哔哩_bilibili【模板】单调栈 - 洛谷文章尚有不足,请各位大佬指出,若有更好的解法及模板大家一起分享。PSyxc。

2024-03-30 23:03:33 663

原创 第十四届省赛大学B组(C/C++)飞机降落

对于第一组数据,可以安排第 3 架飞机于 0 时刻开始降落,20 时刻完成降落。其中第 i 架飞机在 Ti 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di 个单位时间,即它最早可以于 Ti 时刻开始降落,最晚可以于 Ti+Di 时刻开始降落。此题正解即是DFS,直接考虑爆搜就行,建一个结构体存储,每次搜索尝试此架飞机能不能降落,不能降落就换一下架,直到搜到一种能使所以飞机降落的方案即可。一架飞机降落完毕时,另一架飞机可以立即在同一时刻开始降落,但是不能在前一架飞机完成降落前开始降落。

2024-03-30 14:26:07 580

原创 第十四届省赛大学B组(C/C++) 冶炼金属

这里求一下a[i]/b[i]里面找最小值就是最大可能范围,a[i]/(b[i]+1)+1里面找最大值就是最小可能范围,这里解释一下,我们反推回去,此样例是20<=x<=25,对于题中每一个值都满足,A/V=[B,B+1),转化一下,B<=A/V<B+1,A/B>=V>A/(B+1);这个炉子有一个称作转换率的属性 V,V 是一个正整数,这意味着消耗 V 个普通金属 O 恰好可以冶炼出一个特殊金属 X,当普通金属 O 的数目不足 V 时,无法继续冶炼。对于 30% 的评测用例,1≤N≤10^2。

2024-03-29 23:08:14 836

原创 AcWing 528. 奶酪(每日一题)

这类暴力搜索题一定要会,蓝桥杯每年都有这样暴力搜索题,后面还需要多加练习,文章写的急,若有错误请指出,大家一起加油。

2024-03-29 21:26:59 659

原创 AcWing 687. 扫雷(每日一题)

对于此类型的题还不熟悉,还需多加练习,遇见新题没思路写,距离蓝桥杯仅剩半个月左右,大家一起加油。文章有错误的地方请大家指出。

2024-03-26 22:59:40 688 8

原创 AcWing 1355. 母亲的牛奶(每日一题)

主要考察DFS、BFS。记住板子,把自己想得思路往上写即可。此题最难的地方就是一个状态的六种转移方式。只要弄明白了六种转移方式,此题就迎刃而解了。文章尚有不足,若有错误地地方请大家指出,一起进步。

2024-03-25 05:00:00 536 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除