![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++算法
文章平均质量分 94
讲解c++算法竞赛常见算法,侧重刷题
一个很不专业的编程小白
这个作者很懒,什么都没留下…
展开
-
浅谈模拟退火算法(SA)
模拟退火及例题讲解原创 2024-07-15 18:28:52 · 949 阅读 · 3 评论 -
浅谈简单的程序优化技巧(C++)
在 C++ 编程中,优化是提升程序性能的关键步骤。常数优化,虽然看似细微,但在某些情况下却能显著提高程序的运行效率。本文将为您介绍一些实用的 C++ 常数优化技巧。原创 2024-08-05 14:27:10 · 992 阅读 · 4 评论 -
浅谈简单的搜索算法(c++)
目录DFS思路实现应用场景DFS 的优缺点优点缺点例题讲解N皇后问题[题目描述]输入输出样例输入样例输出思路AC代码排列数字[题目描述]输入格式输出格式数据范围输入样例:输出样例:思路AC代码树的重心[题目描述]输入格式输出格式数据范围输入样例输出样例:AC代码[SDOI2013] 直径题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路AC代码BFS思路实现应用场景特点和优势例题讲解八数码[题目描述]输入格式输出格式输入样例:输出样例思路AC代码图中点的层次[题目描述]输入格式输出格式数原创 2024-08-04 16:48:06 · 780 阅读 · 0 评论 -
浅谈基础的图算法——Tarjan求强联通分量算法(c++)
因为这样,假设割点左边有一个子图,右边也有一个子图,由于这个点是割点,那么左右一定是没有其他边联通的, 所以该点的联通的连v满足low[v]>=dfn[u],最后特判一下根。给定一张无向图,求每个点被封锁之后有多少个有序点对(x,y)(x!个点就是去掉这个点之后,图中的强联通分量变多了,那么这个点就是一个割点。把城镇看作节点,把道路看作边,容易发现,整个城市构成了一个无向图。每条道路连结两个不同的城镇,没有重复的道路,所有城镇连通。原创 2024-08-04 10:03:07 · 1027 阅读 · 1 评论 -
浅谈基础DP算法——背包问题(c++)
输入文件medic.in的第一行有两个整数T(1原创 2024-08-04 09:08:19 · 1036 阅读 · 0 评论 -
浅谈KMP算法(c++)
为方便讲述,字符串下标从 开始。原创 2024-08-03 11:10:20 · 757 阅读 · 0 评论 -
浅谈Trie树算法(c++)
又称字典树,用边来代表字母,而从根结点到树上某一结点的路径就代表了一个字符串。举个例子,1->4->8->12 表示的就是字符串 caa。很简洁、自然的算法,所以也没什么能讲的,下面直接看一道例题及其代码。字典树最基础的应用——查找一个字符串是否在“字典”中出现过。原创 2024-08-03 16:22:43 · 907 阅读 · 0 评论 -
浅谈AC自动机算法(c++)
考虑字典树中当前的结点u,u的父结点是u,u通过字符 c 的边指向u,即trie[p, c] = u。假设深度小于u 的所有结点的 fail 指针都已求得(只需要通过 BFS 就可以得到这个性质)(特别的,令 fail[root] = root,令深度为 1 的所有节点 x, fail[x] =root)。由 s 构造的自动机能接受的字符串是以 s 为子串的串 t。其能接受的字符串就是插入到Trie 树中的字符串(或者是插入到 Trie 树中的字符串的前缀,这取决于你如何定义Trie 树的接受状态)。原创 2024-08-04 08:16:57 · 776 阅读 · 0 评论 -
浅谈基础的图算法——最小生成树算法(c++)
我们定义无向连通图的 最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。注意:只有连通图才有生成树,而对于非连通图,只存在生成森林。原创 2024-08-02 15:47:21 · 890 阅读 · 0 评论 -
浅谈图论中树及其相关知识点(树的遍历、直径、最近公共祖先)(c++)
树的直径是指树中最长的一条简单路径一棵树可以有多条直径可以用DFS或者树形DP在On时间内求出一棵树的直径对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u和v的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先。原创 2024-07-26 16:29:12 · 857 阅读 · 0 评论 -
浅谈用二分和三分法解决问题(c++)
头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛之间的互相打斗,Farmer John 想把这些牛安置在指定的隔间,所有牛中相邻两头的最近距离越大越好。而如果某个问题的解空间是单峰的,不管是向外凸还是向内凹,都可以用另一种算法解决,三分。的数列,我们需要找出该数列的一个子串,使得子串平均数最大化,并且子串长度。顾名思义,三分就是一种把解空间分成三段的算法,答案一定在某个段内,时间是。门考试成绩,您的累积平均成绩的可能最大值是多少。的数量应该尽可能的多,并且当她的 IQ 为。原创 2024-07-29 20:57:46 · 1028 阅读 · 0 评论 -
浅谈五种最短路算法(c++)
最短路问题,说人话就是给定一个图,求两个点之间所有走法中,边权和最短的路的值。总的来说,最短路算法分为5个不同的种类。floyd概述floyed算法是多元最短路的算法(说人话:随便两个点我都能求),主要思想就是只要算的多就一定能做出来。思路每次找到一个点k,在遍历所有点,找到一对i,j,d[i][j]=min(d[i][j],d[i][k]+d[k][j]);例题题目描述样例输入时间复杂度分析由循环易知,时间复杂度是O(n^3)。(200以上的数据就不要用了)原创 2024-03-17 14:52:50 · 1019 阅读 · 1 评论 -
浅谈STL标准库及应用(c++)
包含着一系列连续存储的元素,约等于一个数组。访问向量中的任意元素或从末尾添加元素都可以在O(1)的时间复杂度内完成,而查找特定值的元素所处的位置或是在向量中插入元素则是O(n)的时间复杂度。链表将元素按顺序储存在链表中. 与 向量相比, 它允许快速的插入和删除,但是随机访问却比较慢.双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。是一个容器类的改编,为程序员提供了堆栈的全部功能,也就是说实现了一个先进后出(FILO)的数据结构。你可以想象一下你堆在一起的的盘子。原创 2024-05-12 21:11:38 · 736 阅读 · 1 评论 -
浅谈莫比乌斯反演(c++)
Fn∑d∣nGdHndFnd∣n∑GdHdn则称 F 是 G 和 H 的狄利克雷卷积,记作 F = G ∗ H。原创 2024-08-01 18:27:47 · 1260 阅读 · 1 评论 -
浅谈根号类算法及其应用(分块,莫队)(c++)
今日机房集训,对根号类算法有了一点浅薄的理解,把篇博客庆祝一下。原创 2024-07-27 09:35:42 · 682 阅读 · 0 评论 -
浅谈位运算及其应用(c++)
位运算在 C++ 中是一种强大而灵活的工具,掌握它可以让我们在编程中更加高效地处理数据、优化性能,并实现一些复杂而有趣的功能。但同时,我们也要注意其使用的场景和可能带来的潜在问题,以确保代码的正确性和可维护性。希望通过这篇博客,您对位运算在 C++ 中的应用有了更深入的理解和认识,能够在实际编程中灵活运用,创造出更优秀的程序。原创 2024-07-31 19:42:14 · 686 阅读 · 0 评论 -
浅谈最小生成树算法(c++)
prim算法很像Dijkstra算法,还不会Dijkstra的朋友可以看一下我的上一篇文章。因为生成的树中,每个点都包含其中,所以我们从任意一个点开始搜索(推荐用1号点,当然,你要是一身反骨非得用别的点我也没意见),找到最短边,把最短边的权累加进答案里,标记这个点,修改dist数组Kruskal按边权从小到大排序,每次取出最短的边,用并查集判断边的两个端点是否连通。不连通就加进并查集,更新答案。原创 2024-03-24 20:57:23 · 401 阅读 · 0 评论 -
浅谈简单的数据结构(树状数组 、线段树)(c++)
_*课间休息后的知识点轰炸。原创 2024-07-28 20:56:39 · 863 阅读 · 0 评论 -
浅谈用Tarjan算法求解SCC(强连通分量)问题
不是所有有向图都是强连通图,但一定存在这个图的子图中一定有强连通图,则这个字图就是原图的一个强连通分量。强连通图的强连通分量只有一个,任意有向图的强连通分量最多有点数那么多个。tarjan算法的本质就是深搜,在深搜中维护某些值。原创 2024-05-12 14:48:59 · 809 阅读 · 0 评论 -
浅谈简单的数据结构(单调队列,单调栈,优先队列)(c++)
_*又是被机房信息轰炸的一天,我太难了。原创 2024-07-28 20:08:01 · 727 阅读 · 0 评论 -
浅谈哈希与哈希表(c++)
哈希和哈希表是 C++ 编程中非常重要的数据结构,它们在提高数据存储和检索效率方面发挥着关键作用。通过深入理解其原理和实现,我们能够在实际编程中更好地运用它们来解决各种问题。这是我的第十六篇文章,如有纰漏也请各位大佬指正。原创 2024-08-01 19:37:41 · 758 阅读 · 0 评论 -
浅谈二分查找算法(c++)
二分算法,又称为折半查找算法,是一种在有序数组中查找某一特定元素的搜索算法。它的高效性和简洁性使其在许多领域都有着广泛的应用。二分算法的核心思想是通过不断地将搜索区间缩小一半,来逐步逼近目标元素。假设我们有一个有序的整数数组arr,要查找一个特定的目标值target。首先,我们定义两个指针,left指向数组的起始位置,right指向数组的末尾位置。然后,计算中间位置。接下来,将中间元素arr[mid]与目标值target进行比较:如果,则找到了目标元素,算法结束。如果。原创 2024-07-23 20:56:47 · 606 阅读 · 0 评论 -
浅谈基础数论(c++)
需要注意的是,除法并不满足同余,但在很多题目中,由于答案过大常让我们输出答案对一个数取模后的答案,那如果在这种题目中我们遇到除法怎么办?,状况三会退回了初始状况,状况四与状况一相同,所以,题面中的两种操作是等价的,那么,接下来的叙述中,只考虑操作一。满足ax+by=gcd(a,b)的(x,y),有很多,假设(x_0,y_0)是其中一组。我们尽量让a,b互质,即c=1,接着构造,如果两数不互质就加减,直到互质为止。由此可知,逆元存在的条件为gcd(a,m)=1,如果m为质数,则对于任意。原创 2024-07-31 19:54:13 · 1115 阅读 · 0 评论