竞赛算法
文章平均质量分 78
本专栏聚焦于算法竞赛中的高效算法与技巧,涵盖数据结构、动态规划、图论、搜索算法等核心内容。通过实际例题解析和优化思路,帮助读者在竞赛中提升解题速度与准确性,掌握应对复杂问题的算法设计方法。适合希望在编程竞赛中获得更好成绩的选手,以及对算法设计感兴趣的开发者。
T0uken
这个作者很懒,什么都没留下…
展开
-
【算法模板】数据结构:非递归线段树(区间加法与区间求和)
线段树(Segment Tree)是一种重要的算法数据结构,广泛用于解决区间查询与修改问题。然而,传统递归实现线段树存在一定复杂性。本文重点讲解 **非递归线段树**,实现 **区间加法** 和 **区间求和** 功能。原创 2024-11-16 18:41:48 · 581 阅读 · 0 评论 -
【算竞模板】Python:常用模块
模块用于在已排序的列表中高效地查找和插入元素,适用于二分查找的场景。它提供了一系列函数来维护一个最小堆,使得每次获取的元素都是当前堆中最小的。设置递归调用的最大深度。它以列表形式存储所有传递给脚本的参数,其中第一个元素是脚本名称,后续元素为传递的参数。模块提供了一系列常用的数学函数和常量,适用于需要高效计算的场景。使用最近最少使用 (LRU) 策略缓存函数的返回结果,提升带有重复计算的递归算法的性能。提供了函数工具,主要用于函数的缓存和高阶函数的操作。中的插入位置,使得插入后的列表保持有序(偏右侧插入)。原创 2024-09-07 14:48:29 · 849 阅读 · 0 评论 -
【蓝桥杯】一文详解比赛流程及备赛方向
报名时间:2023年10月7日-2023年12月15日省赛比赛时间:2024年4月13日国赛比赛时间:2024年6月1日*按照各学校实际情况,是否举行校赛,省赛采取线下还是线上。原创 2024-04-15 21:24:59 · 37057 阅读 · 0 评论 -
【操作与配置】CLion环境配置
CLion是一款由JetBrains公司开发的跨平台C/C++集成开发环境(IDE)原创 2024-05-25 22:03:21 · 543 阅读 · 0 评论 -
【操作与配置】Codeforces翻译(汉化)插件
Codeforces是一个在线的算法竞赛和训练平台,提供来自不同难度级别的编程竞赛和题目,以帮助编程爱好者提高算法和编程能力。它也提供了一个社区和博客,用户可以在平台上相互交流和分享经验。Codeforces也举办各种规模的编程比赛,包括团队比赛和个人比赛。原创 2024-05-25 22:24:23 · 6208 阅读 · 3 评论 -
【操作与配置】DevC++更新编译器
下载支持 C++20 的 MinGW 版本访问MinGW-w64网站。下载一个包含较新版本的 GCC 编译器的 MinGW 分发版,确保它支持 C++20(比如 GCC 10.2 或更新)。解压并配置 MinGW将下载的 MinGW 解压到一个你想要的位置,例如。记下解压后的路径,稍后会用到。配置 Dev-C++ 使用新的 MinGW打开 Dev-C++。进入工具(Tools)->编译选项(Compiler Options)。在选项卡中,选择由文件夹添加编译器设置。在。原创 2024-08-03 15:35:20 · 2394 阅读 · 0 评论 -
【算法模板】数据结构:并查集
存储每个集合,树上的每个节点都是一个元素,树根是集合的代表元素。这样一来,在合并两个集合时,只需连接两个树根(令其中一个树根为另一个树根的子节点,即。这种方法可以快速查询元素的归属集合,但在合并时需要修改大量元素的f值,效率很低。合并时,选择哪棵树的根节点作为新树的根节点会影响未来操作的复杂度。我们可以按照子树大小去合并,小的合并到大的,以免发生退化。为了具体实现并查集这种数据结构,我们首先需要定义集合的表示方法。在并查集中,我们采用“代表元”法,即为每个集合选择一个固定的元素,作为整个集合的“代表”。原创 2024-05-19 15:00:38 · 1060 阅读 · 1 评论 -
【算法模板】动态规划:线性DP+背包问题
动态规划(Dynamic Programming,简称DP)是一种解决多阶段决策问题的数学优化方法。它将原问题分解成若干个子问题,通过解决子问题只需解决一次并将结果保存下来,从而避免了重复计算,提高了算法效率。 通俗来讲,动态规划算法是解决一类具有重叠子问题和最优子结构性质的问题的有效方法。其基本原理是将大问题分解为小问题,通过保存中间结果来避免重复计算,从而提高算法的效率。 动态规划主要包括两个要素:最优子结构和重叠子问题。原创 2024-05-18 18:57:58 · 917 阅读 · 1 评论 -
【算法模板】图论:树论入门
对于给定的树和非负整数s,找到一个路径F,是某直径上的一段路径(该路径两端均为树中的结点),其长度不超过s,使偏心距ECC(F)最小,并输出这个值。这条路径被称为树网的核,在上述定义下,符合要求的路径不一定只有一个,但最小偏心距是唯一的。在一棵树中,如果我们选择某个结点为根,可以使得它的所有子树中最大的子树最小,那么这个结点就被称作这棵树的重心。把两棵树通过一条边相连得到一棵新的树,那么新的树的重心在连接原来两棵树的重心的路径上。树中有一个特殊的节点称为根节点(root),它没有父节点,且是树的起始节点。原创 2024-05-20 15:22:20 · 1047 阅读 · 1 评论 -
【算法模板】算竞技巧:对拍全解
在计算机编程竞赛中,对拍(Testlib)是一种验证程序正确性的方法。它通常用于检查一个程序的输出是否与另一个程序的输出一致,以确保程序的正确性。对拍通常涉及以下步骤:编写两个或多个解决同一问题的程序,通常一个是暴力解法,另一个是优化解法。使用相同的测试数据对这些程序进行测试,并比较它们的输出。如果所有程序的输出都一致,那么它们很可能都是正确的。原创 2024-05-18 21:25:25 · 1237 阅读 · 0 评论 -
【算法模板】图论:拓扑序+最短路+最小环
单源最短路径问题(Single Source Shortest Path,SSSP问题)是说,给定一张有向图G=(V,E),V是点集,E是边集,|V|=n,|E|=m,节点以[1,n]之间的连续整数编号, (x,y,z)描述一条从x出发,到达y,长度为z的有向边。综上,转移方程为f[k][i][j]=min(f[k-1][i][j],f[k-1][i][k]+f[k-1][k][j])。扫描节点x的所有出边(x,y,z),若dist[y]>dist[x]+z,则使用dist[x]+ z更新dist[y]。原创 2024-05-21 14:50:52 · 1514 阅读 · 1 评论 -
【算法模板】动态规划:状压DP
状压DP(又称“状态压缩动态规划”)是一种动态规划的变体,广泛应用于涉及状态压缩问题的场景,比如图的状态、子集问题等。它通过压缩状态表示来降低复杂度,从而使得解决问题的方式更加高效。原创 2024-08-05 20:06:07 · 405 阅读 · 0 评论 -
【算法模板】数论:乘法逆元求法二则
费马小定理:时间复杂度为 O(logp),其中 ppp 是质数模数。扩展欧几里得算法:时间复杂度为 O(logm),其中 m 是模数。在实际应用中,如果模数 p 是质数且已知,费马小定理通常会更高效,因为只需要进行一次快速幂运算。而扩展欧几里得算法在模数不为质数的情况下仍然适用,且其处理范围更广。原创 2024-08-03 12:43:55 · 613 阅读 · 0 评论 -
【算法模板】数论:杨辉三角求组合数
杨辉三角,又称帕斯卡三角形(Pascal’s Triangle),是数学上的一个著名排列组合形式,它在代数、组合数学、概率论等多个数学领域都有广泛的应用。这个三角形以法国数学家布莱士·帕斯卡的名字命名,但实际上它在帕斯卡之前就已被中国的数学家所知,并在中国古代数学著作《张丘建算经》和《缉古算经》中都有记载,因此也被称为“杨辉三角”,以纪念中国南宋时期的数学家杨辉。原创 2024-07-17 22:07:49 · 477 阅读 · 0 评论 -
【算法模板】图论:最小生成树
若再从剩余的m-k条边中选n-1-k条添加到生成森林中,使其成为G的生成树,并且选出的边的权值之和最小,则该生成树一定包含这m-k条边中连接生成森林的两个不连通节点的权值最小的边。给定一张边带权的无向图G=(V,E),n=|V|,m=|E|。边的权值之和最小的生成树被称为无向图G的最小生成树(Minimum Spanning Tree, MST)。从已选择的顶点集合中选取一个顶点,该顶点与未选择的顶点构成的边权重最小,并且该边的另一端顶点未被选择,将该顶点和边加入最小生成树中。原创 2024-05-21 21:34:58 · 639 阅读 · 1 评论 -
【算法模板】数据结构:树状数组
树状数组(Binary Indexed Trees)其基本用途是维护序列的前缀和。对于给定的序列a,我们建立一个数组C,其中c[x]保存序列a的区间[x-lowbit(x)+1,x]中所有数的和。事实上,数组c可以看作一个如下图所示的树形结构,图中最下边一行是N个叶节点(N=16),代表数值a[1~N]。如果N不是2的整次幂,那么树状数组就是一个具有同样性质的森林结构。原创 2024-05-29 21:09:38 · 320 阅读 · 0 评论 -
【算法模板】计算几何:点类与线类
计算几何(Computational Geometry)是计算机科学中的一个分支,专注于研究几何问题的算法和数据结构。它主要涉及几何对象(如点、线段、多边形等)的表示、操作和分析,旨在高效地解决几何问题。原创 2024-08-13 20:02:33 · 438 阅读 · 0 评论 -
【算法模板】算竞技巧:Python对拍数据生成
在计算机编程竞赛中,对拍(Testlib)是一种验证程序正确性的方法。它通常用于检查一个程序的输出是否与另一个程序的输出一致,以确保程序的正确性。原创 2024-08-07 14:22:56 · 1148 阅读 · 0 评论 -
【算法模板】图论:Tarjan算法求割边割点
定义:特性:定义:特性:定义:性质:存在割点时必有割边:如果一个节点是割点,那么至少存在一条通过该节点的割边。删除割点会导致图分裂为多个部分,每个部分之间至少存在一条割边。割边连接的节点可能是割点:割边的两个端点节点至少有一个可能是割点。特别是在边的两个端点是不同的双连通分量时,这两个节点通常是割点。独立的关系:虽然割点和割边紧密相关,但它们也可以独立存在。一个图可以有割点而没有割边,或者有割边而没有割点。例如,星型图的中心节点是割点,但星型图的每条边都是割边。例题P3388 【模板】割点(割顶)给出原创 2024-08-05 02:18:51 · 1837 阅读 · 0 评论 -
【算法模板】数论:费马小定理求组合数
费马小定理可以用来计算模逆元,即给定一个整数 a,可以通过计算 a^(p−2)mod p 来得到 a 在模 p 下的逆元(前提是 p 是质数)。:使用费马小定理计算并存储所有从 0 到 n 的阶乘逆元 invFact[i]=(i!)−1mod p。:计算并存储所有从 0 到 n 的阶乘值 fact[i]=i!给定一个多项式 (by+ax),请求出多项式展开后 x。原创 2024-08-03 17:28:34 · 436 阅读 · 0 评论 -
【算法模板】数据结构:ST表
ST表是一种基于思想,用于解决的数据结构是指对于运算 optopt,满足 𝑥opt𝑥=𝑥xoptxx,则对应的区间询问就是一个可重复贡献问题。例如,最大值有 max(𝑥,𝑥)=𝑥max(xx)=x,gcd 有 gcd(𝑥,𝑥)=𝑥gcd(xx)=x,所以 RMQ 和区间 GCD 就是一个可重复贡献问题。像区间和就不具有这个性质,如果求区间和的时候采用的预处理区间重叠了,则会导致重叠部分被计算两次,这是我们所不愿意看到的。原创 2024-05-27 22:19:48 · 627 阅读 · 0 评论 -
【算法模板】数论:裴蜀定理
否则,汽车将向前移动 d 米,撞到墙上,然后反弹 h−d 米,然后停下来,仍然面向墙壁。,an ,如果 d 是这些整数的最大公约数,那么存在整数 x1,x2,…通过这个过程,我们证明了裴蜀定理,即对于任何两个整数 a 和 b,它们的最大公约数 d 总可以表示成它们的某个线性组合形式 ax+by=d。对于任何整数 a 和 b,如果 d 是 a 和 b 的最大公约数,那么存在整数 x 和 y 使得: ax+by=d。现在,您想知道,通过任意数量的操作(包括无操作),汽车前部和墙壁之间的最小距离是多少?原创 2024-07-23 19:18:07 · 910 阅读 · 0 评论 -
【算法模板】数据结构:单调栈
单调栈的核心思想是通过维护一个栈,使得栈内元素保持某种单调性(递增或递减),从而在遍历数组时可以快速确定当前元素相关的特定信息,如下一个更大元素、前一个更小元素等。原创 2024-08-10 17:36:13 · 408 阅读 · 0 评论 -
【算法模板】数据结构:字符串哈希
计算机上的非数值处理的对象基本上是字符串数据。在较早的程序设计语言中学符串是作为输入和输出的常量出现的。随着语言加工程序的发展,产生了字符串处理这样,字符串也就作为一种变量类型出现在越来越多的程序设计语言中,同时也产生了一系列字符串的操作。字符串一般简称为串。在汇编和语言的编译程序中,源程序及目标程序都是字符串数据。在事务处理程序中,顾客的姓名和地址以及货物的名称、产地和规格等一般也是作为字符串处理的。原创 2024-05-22 21:42:03 · 622 阅读 · 0 评论 -
【算法模板】图论:Tarjan算法求强连通分量
Tarjan 算法是一种高效的求有向图中所有强连通分量的方法。一个强连通分量(SCC)是一个极大子图,其中任意两个顶点之间都是可达的。原创 2024-08-05 00:22:05 · 945 阅读 · 0 评论 -
【算法模板】图论:最近公共祖先(LCA)
最近公共祖先(Lowest Common Ancestor,简称LCA)问题通常出现在树或图的结构中,特别是在计算机科学和算法领域。这个问题的核心是找到两个节点在树中的共同祖先,且这个祖先的深度(或者说高度)是最小的。原创 2024-05-29 21:10:43 · 870 阅读 · 0 评论 -
【算法模板】基础:反悔贪心
反悔贪心算法(Regret-Greedy Algorithm)是一种特殊的贪心算法变种,主要应用在需要多次决策的优化问题中。它的核心思想是允许在某些情况下撤销之前的决策(即“反悔”),并做出更优的选择,从而提高整体解的质量。原创 2024-08-09 20:30:10 · 479 阅读 · 0 评论 -
【算法模板】图论:欧拉路
欧拉路径(欧拉通路):通过图中所有边的简单路。欧拉回路:闭合的欧拉路径。(即一个环,保证每条边都通过且仅通过一次)欧拉图:包含欧拉回路的图。半欧拉图:具有欧拉路径但不具有欧拉回路的图。原创 2024-06-30 18:47:47 · 411 阅读 · 0 评论 -
【算法模板】动态规划:区间DP
区间DP也属于线性DP中的一种,它以“区间长度”作为DP 的“阶段”,使用两个坐标(区间的左、右端点)描述每个维度。在区间DP中, 一个状态由若干个比它更小且包含于它的区间所代表的状态转移而来,因此,区间D 的决策往往就是划分区间的方法。区间DP 的初态一般就由长度为1的“元区间”构成。这种向下划分再向上递推的模式与某些树形结构,也有很大的相似之处。编程实现动态规划的状态转移方程时,务必分清。原创 2024-05-30 15:39:27 · 836 阅读 · 0 评论 -
【算法模板】数据结构:三分查找
算法竞赛中的三分(ternary search)是一种用于在单峰函数(unimodal function)上找到最大值或最小值的搜索算法。与二分搜索(binary search)类似,三分搜索在每次迭代中将搜索空间分成三个部分,但三分搜索用于连续区间而不是离散区间。原创 2024-08-07 13:53:58 · 848 阅读 · 0 评论 -
【算法模板】数据结构:分块
分块的时间复杂度主要取决于分块的块长,一般可以通过均值不等式求出某个问题下的最优块长,以及相应的时间复杂度,我们一般取根号相关的值。分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。分块是一种很灵活的思想,相较于树状数组和线段树,分块的优点是通用性更好,可以维护很多树状数组和线段树无法维护的信息。严谨来说,分块是一种思想,而不是一种数据结构。原创 2024-05-23 22:36:56 · 591 阅读 · 1 评论 -
【算法模板】计算几何:Andrew 算法求凸包
是一个平面中给定一组点的最小凸多边形。简单来说,凸包可以看作是一个“围住”所有点的橡皮带的形状。当你把一根橡皮带围住这些点时,它的形状即为这些点的凸包。: 凸包是包围给定点集的最小凸多边形。这意味着它的边界点是点集中边界的点。: 凸包内部的任意两点之间的连线都完全位于凸包内。: 凸包的边界由输入点集中的一部分点构成,且这些边界点都是形成凸包的最外层点。: 对于任意一组点,其凸包是唯一的,但在某些情况下(如有多个点重合),凸包的形式可能会有多个相同的边界。原创 2024-08-14 14:56:43 · 1020 阅读 · 0 评论 -
【算法模板】博弈论:尼姆博弈定理与SG定理
博弈论是经济学的一个重要分支,研究多位玩家在竞争或对抗环境中根据规则所做的决策和优化策略。博弈论中分为公平组合游戏和非公平组合游戏两类。公平组合游戏中,参与者轮流决策,且决策与参与者身份无关,而非公平组合游戏则要求决策与玩家身份相关。大多数棋类游戏属于非公平组合游戏。此外,反常游戏采用常规游戏规则,但胜者是第一个无法进行决策的玩家,例如在反常Nim游戏中,取走最后一颗石子的玩家为失败者。原创 2024-08-17 16:27:27 · 751 阅读 · 0 评论 -
【算法模板】基础:区间合并
区间合并是一种常见的算法问题,通常在处理范围覆盖、时间调度、区间覆盖等问题时会用到。区间合并的目的是将一些有重叠或相邻的区间合并成一个更大的区间,从而简化问题的复杂性。原创 2024-08-26 23:41:35 · 541 阅读 · 0 评论 -
【算法模板】基础:尺取法
尺取法(Sliding Window Technique),也叫滑动窗口法,是一种常见的算法思想,主要用于在一维数组或字符串中寻找满足某种条件的子数组或子串。它的核心思想是通过维护一个可变的窗口来遍历数组或字符串,从而有效地减少问题的时间复杂度。原创 2024-08-27 12:34:51 · 1018 阅读 · 0 评论 -
【算法模板】计算几何:旋转卡壳求凸包直径
旋转卡壳算法是一种几何算法,主要用于在二维平面上求解与凸包相关的最优问题。该算法利用凸包顶点的顺序性和对称性,通过模拟两个卡壳(calipers)沿着凸包边界的旋转来寻找最优解。常见的应用包括计算凸包的直径(即最远点对之间的距离)、最小包围矩形(最小面积矩形),以及最小宽度(宽度最小的方向)。原创 2024-08-14 21:22:15 · 567 阅读 · 0 评论