自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 收藏
  • 关注

原创 32.图的连通性问题

若一张无向图的节点两两互相可达,则称这张图是。G是一个无向图。若H是G的一个连通子图,且不存在F满足H⊊F⊆G且F为连通图,则H是G的一个。若一张有向图的节点两两互相可达,则称这张图是。若一张有向图的边替换为无向边后可以得到一张连通图,则称原来这张有向图是。与连通分量类似,也有。

2025-03-01 13:53:17 732 1

原创 9.指针与链表基础

链表是一种用于存储数据的数据结构,通过如链条一般的指针来连接元素。它的特点是插入与删除数据十分方便,但寻找与读取数据的表现欠佳。链表和数组都可用于存储数据。与链表不同,数组将所有元素按次序依次存储。不同的存储结构令它们有了不同的优势:链表删除和插入数据的时间复杂度是O1O(1)O1。寻找、读取数据的时间复杂度是OnO(n)On。链表删除和插入数据的时间复杂度是OnO(n)On。寻找、读取数据的时间复杂度是O1O(1)O1。//指针ll value;

2024-10-18 22:04:54 1165 1

原创 30.线段树与树状数组基础

树状数组是一种支持单点修改和区间查询的,代码量小的数据结构。普通树状数组维护的信息及运算要满足结合律且可差分,如加法(和)、乘法(积)、异或等。x∘y∘zx∘y∘zx∘y∘zx∘y∘z,其中∘\circ∘是一个二元运算符。可差分:具有逆运算的运算,即已知x∘yx\circ yx∘y和xxx可以求出yyy。事实上,树状数组能解决的问题是线段树能解决的问题的子集:树状数组能做的,线段树一定能做;线段树能做的,树状数组不一定可以。

2023-12-02 00:02:37 1390

原创 数学基础1

..−4−3−2−101234...Z31​58​1.37...有理数:整数和分数统称为有理数。有理数集用Q表示。aa∣a∣。

2023-11-11 00:15:14 642

原创 CSP-J 2023真题解析

做模拟题最关键的问题是,很多时候你不知道它在说什么,你大概率美学过,没看过。但这不重要,你只需要读完全部题目即可,它一定会给足所有信息,只需。问最早到终点的时刻是多少,如果不存在这样的方案,输出。,要求不能早于这个时刻通过此点,且不允许在同种任何地方停留。但是模拟题的问题在于,你很难拿到满分,你有一下问题需要注意。的整数来判断是否有解,以及求最大的解,这样可以得到。现要从起点一直走到终点,要求到达终点的时刻一定是。现求多少天能拿完所有的苹果,而编号为。如题所示,一个字都别漏,纯纯的模拟题。

2023-11-04 10:30:11 1631

原创 29.组合数学

排列组合是组合数学的基础内容,学好基础的排列组合部分才能在后续更高级的算法种熟练应用。:指从给定个数的元素中取出指定个数的元素进行排序。:指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。排列组合的核心问题是研究给定要求的排列或组合可能出现的情况总数。排列组合一般与古典概型关系密切。在高中数学中,排列组合多是利用列表、枚举等方法解题,并不涉及很复杂的组合数学知识。

2023-10-21 10:59:50 508

原创 28.直径与重心

对于树上的每一个点,计算其所有子树中最大的子树节点数,这个值最小的点就是这棵树的重心。子树:指无根树的子树,即包括向上的那棵子树,并且不包括整棵树自身。

2023-09-23 15:16:34 288 2

原创 27.最近公共祖先问题

有时候因为题目特性,倍增求 LCA 可能会比较慢。而由于一些强制在线的原因, tarjan 离线的方法求 LCA 的方法也不再适用,这时候就需要下面讲到的树链剖分算法进行求解了。主要思想是利用轻重链的划分来快速在树上进行跳转。

2023-08-30 18:02:08 233

原创 26.最小生成树

Kruskal 算法是一种常见并且好写的最小生成树算法,由 Kruskal 发明。该算法的基本思想是从小到大加入边,是个贪心算法,一般需要借助并查集这一数据结构来实现。Prim 算法是另一种常见并且好写的最小生成树算法。该算法的基本思想是从一个结点开始,不断加点,这和以加边的方式进行的 Kruskal 算法有所不同。在算法的流程上与 Dijkstra有更多的相似之处。

2023-08-26 12:17:45 328

原创 25.并查集

如果树边不只是表示两者同属一个集合的关系,还涉及到边权的问题,那么这样的并查集就变成了带权并查集,查询与合并时需要进行的操作都有很多的不同。

2023-08-23 13:42:00 194

原创 4.数组与基本数学函数

数组的声明形如a[len],其中,a是数组的名字,len是数组中元素的个数。在编译时,len应该是已知的,也就是说,len应该是一个整型的表达式。通常使用常量或者宏定义,也可以是变量,但一般不建议使用。// 错误 arr2 = arr1;// 错误应该尽量将较大的数组定义为全局变量。因为局部变量会被创建在栈区中,过大的数组会爆栈,进而导致 RE(run time error)。如果将数组声明在全局作用域中,就会在堆中创建数组。

2023-08-04 23:07:36 358

原创 3.分支与循环

一个 CPP 程序默认是按照代码书写顺序,从上到下依次执行下来的。但是,有时我们需要选择性的执行某些语句,来实现更加复杂的逻辑,这时候就需要分支结构语句的功能来实现。选择合适的分支语句可以显著提高程序的效率。

2023-08-01 14:58:16 181 1

原创 2.基本运算

类型转换规则如下所示:位运算符用于对二进制数进行按位运算,这是计算机最底层的运算法则。学习位运算对后续诸多算法和数据结构都有很大的帮助。有时我们需要让变量进行增加 111 或者减少 111,这时自增运算符 和自减运算符 就派上用场了。自增/自减运算符可放在变量前或变量后面,在变量前称为前缀,在变量后称为后缀,单独使用时前缀后缀无需特别区别,如果需要用到表达式的值则需注意,具体可看下面的例子。五、比较运算符运算符功能大于大于等于小于小于等于等于

2023-07-28 23:28:49 303

原创 24.最短路问题

解决单源最短路径问题常用 Dijkstra 算法,用于计算一个顶点到其他所有顶点的最短路径。Dijkstra 算法的主要特点是以起点为中心,逐步向外扩展,每次都会取一个最近点继续扩展,直到取完所有点为止。注意:Dijkstra 算法要求图中不能出现负权边。

2023-07-28 14:52:33 371

原创 1.CPP基本介绍

是一个用于输入输出流(input and output stream)的库,里面包含一系列可以用于输入、输出的方法。在 C 或 C++ 中,程序的返回值不为 0 会导致运行时错误(RE)。变量可以被看做一个盒子,每个盒子中可以存储一定的值。C++ 为了和 C 保持兼容,可以直接使用部分 C 语言中的头文件,例如。类型一般为 8 位,底层存储的方式依然是整数,一般通过。给左侧的一个变量,让变量这个盒子存储这一个值。如果修改了常量的值,在编译环节就会报错。,表示标准输入输出流。中的代码,这是整个程序的入口。

2023-07-26 12:44:38 2422

原创 23.简单背包问题

有N件物品和一个容量是V的背包。。第i件物品的体积是wi​,价值是vi​。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。

2023-07-21 22:54:43 521

原创 22.动态规划入门

本次课我们将介绍介绍动态规划(Dynamic Programming, DP)及其解决的问题、根据其设计的算法及优化。动态规划是算法竞赛当中一种非常重要手段,它是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。由于动态规划并不是某种具体的算法,而是一种解决特定问题的方法,因此它会出现在各式各样的数据结构中,与之相关的题目种类也更为繁杂。

2023-07-07 23:38:55 724

原创 21.拓扑排序与欧拉图

拓扑排序的英文名是 Topological sorting。拓扑排序要解决的问题是给一个图的所有结点排序,使得排在前面的结点不能于排在后面的结点。在一个DAG(有向无环图)中,我们将图中的顶点以线性方式进行排序,使得对于任何的顶点u到v的有向边uv, 都可以有u在v的前面。若给定一个DAG,如果从i到j有边,则认为j依赖于i。如果i到j有路径,则称i间接依赖于j。若是有环图,则不存在拓扑排序,原因显而易见。

2023-06-24 01:27:27 420

原创 16.二分法

二分法是一种基础但非常精妙的算法,经常能为我们打开解题的思路,也常常作为题目的其中一个重要环节出现。二分的基本用法就是在一个单调序列或单调函数中进行参照点(中心点)的移动。通过不断尝试并每次缩小一半的区间或者取值范围,来最终逼近我们的答案。根据参照点(中心点)的意义,我们分为二分查找和二分答案两大内容。二分答案常常与有关系。二分法还可以衍生出三分法,不过其适用范围很小。如果需要求出单峰函数的极值点,通常使用二分法衍生出的三分法求单峰函数的极值点。

2023-05-27 12:16:43 987

原创 15.贪心算法

贪心算法是指在对问题求解时,总是做出在看来是最好的选择,而不考虑后续可能造成的影响。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。在贪心算法的应用当中,往往都会和排序联系起来,所以想要熟练使用贪心算法则必须首先能够熟练地应用排序。

2023-05-12 22:30:06 811

原创 19.广度优先搜索

广度优先搜索 BFS(Breadth First Search)按照广度优先的方式进行搜索,可以理解为“尝试所有下一步可能”地穷举所有可行的方案,并不断尝试,直到找到一种情况满足问题的要求。BFS 从起点开始,优先搜索离起点最近的点,然后由这个最近的点扩展其他稍近的点,这样一层一层的扩展,就像水波扩散一样。故而可以把 BFS 当成并行计算的一种模拟。广度优先搜索可以用队列实现,而且几乎都是用队列实现,所以要学会广度优先搜索,首先必须要学会队列。

2023-04-15 09:53:12 1188 1

原创 17.高精度计算

高精度计算(Arbitrary-Precision Arithmetic),也被称作大整数(bignum)计算,运用了一些算法结构来支持更大整数间的运算(数字大小超过语言内建整型)。

2023-03-31 23:34:09 1029

原创 18.深度优先搜索

深度优先搜索DFS(Depth First Search)按照深度优先的方式进行搜索,可以理解为“一条路走到黑”地穷举所有可行的方案,并不断尝试,直到找到一种情况满足问题问题的要求。那么这个方案就是一个问题的解。

2023-02-01 00:06:01 735

原创 20.图和树基础

描述的是一些个体之间的关系。这些个体之间既不是前驱后继的顺序关系,也不是祖先后代的层次关系,而是错综复杂的网状关系。我们一般用GVE来表示,V表示结点,E表示边。根据边是否有,分为带权图和不带权图,也可将不带权图视为权重都为1的图。根据边是否有,分为有向图和无向图。根据稠密程度(边的条数∣E∣与∣V∣2)的关系,分为稠密图和稀疏图。

2023-01-28 14:53:45 948

原创 14.基础数论2

任何一个大于1的自然数N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积Np1a1​​p2a2​​p3a3​​...pnan​​,这里p1p2...pn​均为质数,其中指数ai​是正整数。这样的分解称为N的标准分解式。

2023-01-25 01:27:34 658

原创 13.基础数论1

给定一个正整数mmm,两个整数aba,bab叫做模mmm同余,如果a−ba-ba−b被mmm整除,或m∣a−bm\mid a-bm∣a−b,就记作a≡bmodma≡bmodm。否则,叫做模mmm不同余,记作a≢bmodma≡bmodm。

2023-01-18 12:36:03 672

原创 11.stack和queue

使用 STL 的栈需要首先在代码的开头引入这个头文件。stack s;TTT表示我们所定义的数组存储数据的类型。它可以是这样的基本数据类型,可以是typedef之后的代词,也可以是自定义的结构体类型,甚至可以是其他的 STL 类型。一开始定义好的栈的长度为000,代表一个空的栈。队列是 OI 中常用的一种满足一定约束的线性数据结构。队列只允许在其中一端插入,在另一端删除元素,一端被称为队首,另一端被称为队尾。故而队列满足一种“先进先出的原则”。

2023-01-14 01:12:25 975

原创 P3147 [USACO16OPEN]262144 P——解题报告

,问序列中出现的最大数字的值最大是多少。合并后的数值并非加倍而是。来说,如果能够将它们全部合并,那么最终的合并结果一定是。的最大值,设置区间长度从小到大进行状态转移。至此我们仍有一个很关键的信息没有利用上,那就是。首先这道题目一眼看过去,很明显是一个区间。我们首先分析一下合并的结果,对于区间。的题目,而且状态转移方程很容易想。,每次可以合并相邻两个(数值范围。显然是不能的,所以对于合并结果。这个奇怪的数据范围。,所以最终的答案不会超过。那么复杂度显然不如遍历。此方案的时间复杂度为。的合并最大值是否能为。

2023-01-09 16:37:11 601

原创 7.排序与sort

本节将简要介绍各种排序算法,并给出模板以及其性能分析。是一种将一组特定的数据按某种顺序进行排列的算法。排序算法多种多样,性质也大多不同。

2023-01-04 13:13:26 513

原创 12.质数与筛法

欧拉筛是一个能够做到OnO(n)On的时间复杂度,也就是线性的质数筛法,是目前性能最优秀的质数筛法。在很多算法和数据结构题目中都有大量的应用,是一个十分基础的工具。对于一个频繁使用的工具,我们从原理上掌握它是非常有必要的。

2023-01-04 13:10:54 390

原创 10.vector、set和map

有些时候想开一个数组,但是却不知道应该开多大长度的数组合适,因为我们需要用到的数组可能会根据情况变动。这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度是可以根据我们的需要动态改变的。动态数组的实现也不难,但是在 C++ 里面有已经写好的标准模板库 STL,实现了集合、映射表、栈、队列等数据结构和排序、查找等算法。我们可以很方便地调用标准库来减少我们的代码量。C++ 中动态数组写作vector,C 语言中没有标准模板库,这也是为什么参加比赛推荐用 C++ 而不用 C。

2023-01-04 11:14:50 723

原创 6.函数与递归

此前我们使用了很多库函数,现在我们可以定义自己的函数来帮助我们完成一些特定的任务。函数返回值类型有很多类:变量类型同样如此,可以为任意类型。函数的定义必须在使用之前,否则编译器将会报错。通常情况下,函数可以以如下方式定义并调用,函数之间也可以来回调用。但是在某些比较复杂的递归调用中,我们没有办法满足先定义后使用的条件,比如:面对这种情况,我们可以提前声明函数,就可以不考虑函数执行的先后顺序来写函数了。3.形参和实参主函数和函数中都有参数和,但因其作用域没有相交,所以可以使用。函数中的局部变量名称也

2022-12-03 10:52:11 685

原创 8.结构体

可以将任意多不同或者相同的数据类型整合到一个数据类型当中,包括整型、浮点型、字符、数组、指针和结构体自身等等。它可以看作是一种自定义类型,在后续使用时当作如int这样的基本数据类型来使用。一个结构体变量包含定义中所有的变量,每一个变量称为结构体的一个。下面是一个普通的结构体的例子,在这个叫做 node 的结构体中包含了一些常见的数据类型,它有6个成员,其中有两个成员是数组。所以整个结构体总共包含了204个变量。

2022-11-26 16:11:34 1198

原创 5.字符串与字符数组

一个S是将n个字符顺次排列形成的序列,n称为S的长度,表示为∣S∣。如果字符串下标从1开始计算,S的第i个字符表示为Si如果字符串下标从0开始计算,S的第i个字符表示为Si−1。

2022-11-26 16:09:29 903

原创 米勒-拉宾素数检测法(判断一个极大的数是否为质数)——算法解析

在算法竞赛中,我们时常会遇到需要判断一个数是否为质数的问题。我们常常利用筛法来解决这个问题,但是当需要判断的数变得很大时,筛法已经无法满足我们的需求。于是我们采用了一个新的方法:**Miller-Rabin素数检测**。...

2021-10-10 22:11:25 2939

原创 专题5:数据分析与多项式计算

一、数据统计分析1.求最大元素与最小元素(1)参数为向量时y=max(X)[y,k]=max(X)返回向量XXX的最大值存入yyy如果XXX中包含复数元素,则按模取最大值。最大值元素的序号存入kkk(2)参数为向量时Y=max(A)[Y,U]=max(A)返回一个行向量存入YYY,YYY的第iii个元素是矩阵AAA的第iii列上的最大值返回一个行向量存入UUU,UUU的第iii个元素是矩阵AAA的第iii列上的最大值的行号max(A,[],dim)di

2021-09-01 11:12:22 433

原创 专题4:matlab图形绘制

一、二维曲线1.plot函数(1)过程按顺序用直线将各点连接起来,形成一条折线。(2)形式xxx​和yyy​分别用于存储xxx​坐标和yyy​坐标数据,通常xxx​和yyy​​为长度相等的向量。>> x=[2.5,3.5,4,5];>> y=[1.5,2,1,1.5];>> plot(x,y) xxx​为实向量时,则以该向量元素的下标为横坐标,值为纵坐标。>> x=[1.5,2,1,1.5];>> plot(x)

2021-09-01 11:11:39 2615

原创 专题3:matlab程序流程控制

一、顺序结构程序1.文件的建立用命令按钮创建文件用edit命令创建文件>> edit test%在当前文件夹下创建test.m文件2.脚本文件与函数文件(1)脚本文件%test.m文件A=[1,2,3;4,5,6]B=[1,2;3,4;5,6]C=A*B>> test(2)函数文件%test.m文件function C=f2(A,B)C=A*B>> A=[1,2,3;4,5,6];>> B=[1,2;3,4

2021-09-01 11:11:05 228

原创 专题2:matlab矩阵处理

一.特殊矩阵1.通用的特殊矩阵zero函数:产生全000矩阵ones函数:产生全111矩阵eye函数:产生对角线为111的矩阵rand函数:产生(0,1)(0,1)(0,1)区间均匀分布的随机矩阵randn函数:产生均值为000,方差为111的标准正态分布随机矩阵>> zerso(m)%产生m×m的矩阵>> zerso(m,n)%产生m×n的矩阵>> zerso(size(A))%产生与A同样大小的矩阵2.用于专门学科的特殊矩阵魔方阵:n

2021-09-01 11:10:40 276

原创 专题1:matlab基础知识

一、基础知识1.续航符>> ...2.搜索路径变量内部函数程序文件当前文件夹下的程序文件文件搜索路径文件夹中的程序文件3.文件搜索路径(1)path命令>> path(path,'e:\work')4.打印类型>> class(x)5.类型转换(1)转int>> x=int8(128)(2)转浮点数>> x=double(128)>> x=single(128)(3)复数&g

2021-08-17 18:53:28 466

空空如也

空空如也

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

TA关注的人

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