自定义博客皮肤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)
  • 收藏
  • 关注

原创 P9748 [CSP-J 2023] 小苹果 / P7071 [CSP-J2020] 优秀的拆分:做题笔记

那么说明开始执行这个循环的时候就说明已经存在这一天了,我们接下来的循环内部的一些操作都是对这一天算上之后会产生的结果进行计算的,因此我们天数要在最开始直接++。题意我们能看出来是三个三个一组的,然后每次取走的都是三个里面的第一个。我们应该很容易想到如果一轮的总数是三的倍数的话,那直接取走的个数就是倍数,那么对应就会想到如果不是恰好是三的倍数,我们发现取走的个数仍然是这个倍数,说明我们这里是。也可以直接使用向上取整,由于我们这里是对三向上取整,因此我们选择在原数上+2,使得在有余数的情况下,商能够增加1。

2024-05-15 13:24:53 484

原创 【第二十五课】动态规划:数字三角形(acwing-898 / 蓝桥官网503 / c++代码)

它表示一个很大的数,添上负号就表示一个很小的负数。

2024-04-27 22:04:05 1090

原创 日期专题:做题笔记 (时间显示/星期计算/星系炸弹/第几天/纪念日)

②注意1923年7月23日12时到2020年7月1日12时,前者那天只有12小时,后者这一天也是只有12小时,但是我们计算的时候把它当完整的一天进行计算,因此。xx天之后的日期这种,数据可能有点大这种表格不太好做的,都可以用这个模板。我们知道直接用20的22次方模上7,看余数是几,用最开始的6加上余数,直接输出结果就行。①1月1号放置,定时15天,1号爆炸。像这个都是同一年的就可以直接用excel做。因为是填空题,直接输出就可以。有问题欢迎指出,一起加油!,这样对结果是没有影响的。,和星系炸弹用一个模板。

2024-04-04 17:14:16 498

原创 1236. 递增三元组:做题笔记

在第一层循环的基础上,在对第二层数据挑选的时候,就可以利用二分找到我们上面所说的“某个数”,这里的某个数其实也就是当前B数组里第一个大于当前外层循环正在处理的A数组的这个元素,我们知道在这个数之后的B数组中的数都是一种选择的可能。遍历B数组每个元素,可以通过二分找到A数组中第一个大于当前B数组中元素的数的位置,和C数组中第一个大于当前B数组中元素的数的位置,通过元素总数与该位置的相减,得到其中间的元素个数。l 是数组 a 中小于 b[i] 的元素的数量,r 是数组 c 中大于 b[i] 的元素的数量。

2024-04-01 22:36:42 805

原创 AcWing 4405. 统计子矩阵:做题笔记

这道题的主要思路就是枚举所有的子矩阵,判断符合条件的子矩阵的个数。

2024-03-31 21:36:32 929

原创 3723. 字符串查询:做题笔记

注意这个函数的参数类型。

2024-03-28 20:48:38 696

原创 P8649 [蓝桥杯 2017 省 B] k 倍区间:做题笔记

另外有一点,我们最终进行计算的主要是围绕每个相同余数的数的个数,也就是s数组,要考虑到当余数是0的时候,其实相较于我们的通式(x*(x-1))/2是要多1的,可以通过举例来得到。这道题我们甚至可以不开前缀和数组,因为我们计算同余数字的个数的话,其实只对最初求出的前缀和进行取模操作,而不需要对某两个前缀和进行处理,也就是说,,因此,在这里不设前缀和数组和前缀和算法中原数组可以不设的原因是一样的,我们可以直接设一个变量来表示每个数与前一个数相加的和。,即 (a-b)/m得到一个整数,那么就称。

2024-03-27 22:30:41 1062

原创 P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值:做题笔记

因此在输入数据的循环结束之后,还要对最后一层进行特判。哎🥀改了好多次缝缝补补还是不能全部通过😂,放过我自己了🥀。看题解了。然后发现了很好的处理方式。

2024-03-17 17:48:35 480

原创 P8665 [蓝桥杯 2018 省 A] 航班时间:格式问题

哎,这道题做了很长时间还是做错了🥀。

2024-03-16 14:22:21 471

原创 P9240 [蓝桥杯 2023 省 B] 冶炼金属:二分模型

题目链接放着啦。

2024-03-14 19:57:06 468

原创 P8680 [蓝桥杯 2019 省 B] 特别数的和:做题笔记

这里一定注意先转字符串,之后直接利用string类型内置size()函数计算字符串长度也就是数字位数。如果想先算位数,不能用sizeof(x)直接计算,因为在转字符串之前,数字是int类型的,因为我们需要判断每一位是否是特殊数,字符串很容易做到这一点,只是在数字相加这一步不好实现。另一种思路(也是更常用的思路把)就是:不需要转换,刚刚说字符串的优势是判断每一位很方便。②使用switch函数,针对每一种情况,判断每一位是否是我们的特殊数字。计算位数是想使用switch函数,处理不同位数的情况。

2024-03-10 17:25:38 527

原创 P8598 [蓝桥杯 2013 省 AB] 错误票据

(凑个封面)题目链接就放在这啦。

2024-03-07 19:13:13 578

原创 【第二十五课】动态规划:多重背包和分组背包(acwing-4,5,9 /思路 / c++代码)

在看多重背包和分组背包之前,要先有01背包和完全背包基础哦。指路👇。

2024-03-03 11:37:58 893

原创 【第二十五课】动态规划:完全背包问题(acwing-3 / 公式推导 / 思路理解 / 优化 / c++代码)

在开始看完全背包问题之前,可能需要先了解01背包及其解决办法。指路👇。

2024-03-02 19:14:40 877

原创 【第二十五课】动态规划:01背包问题(acwing-2 / 思路 / 含一维数组优化 / c++代码)

反正受到外界干扰够多了,看着"动态规划""背包"这些标题都觉得发怵。。。好好学吧动态规划(Dynamic Programming, DP)是一种解决优化问题的算法思想,常用于求解最优化问题,我们这里主要学习的就是解决背包问题。(关于为什么叫动态规划,就只是个命名而已不用纠结)背包问题就是给定一个容量为V,给出N件物品,每件物品有其体积和价值,让我们得出一种解决方案使得在满足背包容量V的前提下,这些选出的物品的总价值能达到最大。而背包问题又按可选择的物品的次数分为。

2024-02-27 21:25:23 813

原创 【第二十四课】二分图:acwing-860染色法判定二分图 / acwing-861二分图的最大匹配 ( c++代码 )

我这里按照图中说一下:比如1号点最开始应该直接匹配的是4号点,但是在对3号点进行匹配的时候,我们发现3号点只能与1号点匹配,于是我们就想让1号点再找找有没有其他可以选择的(3号点只有1号,只好让1号点变一变啦),发现1号点还可以与6号点匹配,那这样就皆大欢喜啦,我们多了一个匹配数。,由于环的长度是奇数,环的最后一个节点又必须与环的起始节点相连,且它们属于同一个集合,这与二分图的定义相矛盾。3-c作为染色,是因为我们这里用1 2分别表示染成的两种不同的颜色,而3-c刚好能够得到与前一个点的c不同的颜色。

2024-02-16 19:04:24 822

原创 【第二十三课】最小生成树:prime 和 kruskal 算法(acwing858,859 / c++代码 )

之前学最短路的时候,我们都是以有向图为基础的,当时我们提到如果是无向图,只要记得两个顶点处都要加边就好了。而在最小生成树的问题中,我们所面临的大多都是无向图。这个姐姐👇对这两种算法的讲解非常清晰,没有代码部分,但是对于理解这两种算法的做法很有帮助,推荐看一下。【数据结构 图 最小生成树 Prime和Kruskal算法】截取自视频。感觉总结的很好,就搬过来啦(侵删)

2024-02-09 15:57:53 1051

原创 【第二十二课】最短路:多源最短路floyd算法(acwing-852 spfa判断是否存在负环 / acwing-854 / c++代码)

抽屉原理是一个基本的组合数学原理,简单来说就是:如果有n个抽屉和n+1个物品,那么至少有一个抽屉里会有两个或更多的物品。图中左边表示求最短路的函数 右边是判断是否存在负环的代码。如果cnt[j]大于等于节点的总数n,那么说明至少有一个节点被访问了两次,这意味着存在一个环。,检查是否存在一条路径通过这个中间节点可以使得某对节点之间的距离更短。,因此我们对于每个节点对的遍历要经过n次。内层的两个循环的作用就是遍历所有顶点对。有问题欢迎指出,一起加油!好啦,最短路问题也算是写完了。下面是bing的解释。

2024-02-03 18:31:53 602

原创 【第二十二课】最短路:bellman_ford / spfa算法 (acwing-851 / acwing-853 / c++代码)

由于权重可以表示不同的度量,例如距离、时间、费用等,具体取决于问题的背景,因此会存在一些权值为负数的题目。也就是存在负权边的最短路问题。dijkstra算法由于每次都选择当前最短路径的节点进行扩展,并不能解决带有负权值的最短路问题。会存在如下图这样的问题根据dijkstra的算法思路,我们会先确定A->C的最短路径是1,但其实,A可以先到B再到C ,这样最短距离是-2.于是有了bellman_ford算法和SPFA算法专门解决有负权值的最短路问题。

2024-02-03 12:56:00 975

原创 【第二十二课】最短路:dijkstra算法 ( acwing849 / acwing850 / c++ 代码)

就是指:只求是指:要这些情况对应有不同的算法,这次先介绍dijkstra算法的两种。

2024-02-01 17:01:51 1018

原创 【第二十一课】拓扑序列bfs (acwing-848有向图的拓扑序列 / c++代码 )

关于拓扑排序有几点:1.拓扑序列中,每条有向边都是从序列中前面的顶点指向后面的顶点。2.有向无环图(DAG)一定有拓扑序列。存在环的图一定没有拓扑序列,因为环必定有从后面的点指向前面的点的边。3.一个有向无环图一定至少有一个入度为0的点。4.拓扑排序有多种可能的序列,因为图中可能存在多个入度为零的顶点,而这些顶点可以以任意顺序加入拓扑序列。如何求拓扑排序?(刚死去的数据结构知识来攻击我了hh下面这个视频讲了求拓扑排序的方法,推荐看......重复该操作。而我们代码实现就是,用队列模拟这个过程。

2024-01-30 18:16:19 367

原创 【第二十课】树和图的深度/宽度优先遍历(acwing-846树的重心 / acwing-847图中点的层次 / c++代码)

我们。

2024-01-30 12:09:16 979

原创 【第十九课】BFS:广度优先搜索 (acwing-844走迷宫 / 含过程演示的视频推荐 / c++代码)

关于这种类型的题,我是有点印象的。。。当时蓝桥杯校内选拔就有这种题,当时还没学算法hhh。

2024-01-29 16:28:50 899

原创 【第十八课】DFS:深度优先搜索( acwing-843 n-皇后问题 / 两种搜索思路 / c++代码 )

错误写法(可跳看到这道题,我想这不还是n个数的全排列的问题么?也就是把数字变成了字符,一些输出格式上的变化。于是就在原有代码上修改一下应该就行。我的思路就还是path存有可能的排序路径,但是输出的时候要输出字符,且为棋盘格的二维数组形式,因此添加了两层for循环嵌套,并用if语句判断 path[i]==j ,说明此处放皇后Q,符合输出格式。代码这里错误的原因在于,我通过在得到一种答案输出之前,判断相邻两个皇后的数字相差不能是1或-1,也就是限制了相邻两个皇后的位置不能是对角线或者副对角线的关系。

2024-01-28 12:58:41 916

原创 【第十八课】DFS:深度优先搜索(acwing-842排列数字 / c++代码 )

这道题让我们用数学来解,应该很容易写出来就像这样分叉,得到不同方案。用代码实现就要讲到我们今天要学的DFS深度优先搜素。

2024-01-27 17:54:01 439

原创 【第十七课】c++常用的STL容器

上篇vector指路👇。

2024-01-27 13:14:54 1030

原创 【第十七课】STL容器:vector

在前面学习的过程中,其实vector用的还是挺多的。我们所使用到的vector最主要的功能就是,利用vector创建动态数组,也就是可以不提前规定数组的大小, 系统自动根据我们所使用的空间来动态的管理我们数组的大小。vector实现动态数组的原理是:倍增。也就是我们vector类型的数组,当当前空间不够用的时候,就会直接创建一个空间大小是原来2倍的数组,将原来空间里的元素复制到新的数组中。关于当前空间的说法,是否与我们所说的“vector可以不提前规定数组的大小”存在冲突呢?答案是不会的。

2024-01-26 21:23:18 1098

原创 【第十六课】哈希表(acwing-841字符串哈希 / 详解 / 优秀的文章推荐 / c++代码)

字符串的哈希核心思想是:我们把字符串当做一个P进制的数,有点像通过前缀和的思想得到两段字符串的哈希值,在判断两段字符串所映射的哈希值是否相同即可。我们当然可以定义一个特别大的数据类型来避免溢出,只是再大也会有超限的时候,因此要完成取模工作,关于对谁取模,这里又是一个经验值,一般是2^64,而。求每个前缀字符串的哈希值的方法明白了之后,我们就要想,求的时候一直在乘次方,将会导致这个映射的数特别大,也就是。咳咳,感觉这个刚开始第一遍接触的时候很抽象,,,还好网友们很强,有很通俗的解释办法hh。

2024-01-25 18:05:54 1189

原创 【第十六课】哈希表(acwing-840模拟散列表 / 拉链法 / 开放寻址法 / c++代码 )

我对哈希表的印象就是:感觉可以类比数组,像数组的下标和该下标所对的元素之间的关系一样,就是比如ha[0]=1,那么我下标为0所对应的元素就是1,就是这样一种映射关系。只是哈希表所解决的是更复杂一些点、具有某种复杂的函数关系的映射。另外感觉直接连想起来了关于离散化的知识,其实当时写那道题的时候就感觉也是类似哈希表的这种映射,只是当时还没学到hh。离散化:acwing-802区间和这里也提出了离散化是一种特殊的哈希表,它特殊的地方就在于。

2024-01-24 19:39:38 1045

原创 【第十五课】数据结构:堆(acwing-839模拟堆 / ph和hp数组的映射关系 /c++代码 )

上篇已经详细解释过堆的内容,需要可以回顾一下。这里关注这道题提出几个注意点。

2024-01-24 12:35:45 500

原创 【第十五课】数据结构:堆 (“堆”的介绍+主要操作 / acwing-838堆排序 / 时间复杂度的分析 / c++代码 )

但是我们要删的是第一个元素呀,怎么办呢?我们。

2024-01-23 18:38:46 1123

原创 【第十四课】并查集(acwing-837连通块中点的数量 / c++代码 / 思路详解)

这是因为在C++中,

2024-01-23 11:55:17 918

原创 【第十四课】并查集(acwing-836合并集合 / 做题思路 /c++代码)

利用这种方式来实现我们的M和Q操作:M操作就是利用while循环找到两个元素所在树的树根 (判断方式是p[x]==x,我们规定根节点的父节点为其自己),然后将其中一个的p[x]指向另一个元素的父节点即可,也就是。2.1×10^9,而二维数组元素最多有10^10,从这方面来讲也是不可行的( 在64位系统中,最多可有9.2*10^18,不存在该问题)。由于我们的优化是,寻找其中一个节点的根节点,那么每次都会不断地向上搜索,而这中间搜索到的节点,也就是。其根节点都是该元素的根节点,都直接赋值为最终的结果。

2024-01-16 13:06:31 922

原创 【第十三课】Trie字符串统计(acwing-835 / 二维数组的含义 / c++代码)

Trie树在我们之前学习树的时候简单提过一嘴。Trie树也称为前缀树或字典树,是一种用于高效存储和查找字符串的数据结构。Trie树的主要思想是利用字符串之间的公共前缀来节省存储空间,提高查询效率。:Trie树中的每个节点代表一个字符串,这个字符串是的。:如果两个字符串有公共的前缀,那么它们在Trie树中的路径会有公共的部分。这样可以,从而节省空间。:Trie树中的每条边都对应一个字符。。就像图片中这样。

2023-12-29 18:20:49 421

原创 【第十二课】KMP算法(acwing-831 / c++代码 / 思路 / 视频+博客讲解推荐)

进行了详细的阐释。

2023-12-28 21:58:07 1592

原创 【第十一课】数组模拟栈和队列 / 单调栈 / 单调队列(滑动窗口) (c++代码 / 思路 )(acwing-828,829,830,154)

这个数组模拟栈和队列的实现比较简单,我们之前也学过数据结构的内容,比较好实现,就不再多说了。

2023-12-20 18:44:45 872

原创 【第十课】区间和并(acwing-803 / c++代码 / 思路 )

这道题直接说算法思路了。

2023-12-13 18:14:57 62

原创 【第九课】离散化(acwing-802区间和 / c++代码 / 思路超详解 )

其主要思想就是:当数值可取范围特别大(导致我们没办法开数组,会超限),但是我们实际操作的、用上的位置很少、很稀疏,这时候我们就要采用离散化的方法,把使用到的位置的值存放到一个下标从0或者从1开始的数组里面。a和s数组最多位数也就只到alls的最多位,且每位元素与alls的下标一一对应也是连续存储的,但是我们a和s数组定义的大小非常大,预分配了更多的空间以处理可能的最大坐标值,所以我们。在实际操作中,我们只会处理到alls数组的大小的位置,因为这就是所有可能的坐标值的数量。想要复习的可以看之前的文章。

2023-12-12 17:55:33 194 2

原创 【第八课】位运算(acwing-801二进制中1的个数 / 进制转换 / lowbit(x) / 思路详解 /c++代码)

数字逻辑课程里有很多包括其他进制之间的各种转换.(b站期末速成课里讲的很清楚hhh)这里附上相关章节的课程链接,有需要的朋友自取啦~(从第一课时开始前后几个视频都是讲进制转换哒)对啦,里面也包含。我们将二进制数与 1 进行与操作,1 的二进制表示只有最有一个数字是 1 ,前面可以按照该二进制数的位数进行补零。那 1 的二进制数前面都是 0 ,与出来肯定也都是 0 ,所以我们说。位运算符,如位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)和右移(>>),都是直接对整数的二进制位进行操作。

2023-12-10 22:18:35 63

原创 【第七课】双指针算法(acwing-799最长连续不重复子序列 思路详解 c++代码)

这里定义为1是因为我们在判断该数与其前面的数不同的时候,len++,如果符合,那算上其自身和其前一个数,len应该为2,所以len初值定义为1,同时注意由于数组中第一个元素如果按照上面的思路,a[1]与a[0]比较,我们将a数组定义在主函数外部,也就将其初始化为0了,a[0]是0,但其实我们根本就不需要和它比较,所以我们。

2023-12-09 21:13:45 898 3

空空如也

空空如也

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

TA关注的人

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