![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
文章平均质量分 50
灯珑
春暖花开谈恋爱,不如专心搞竞赛
展开
-
动态规划之硬币问题
现有面值为c1,c2,c3,…,cm的m种硬币,求支付n元时所需硬币的最少枚数。各面值的硬币可以使用任意次首先最开始想到的是贪心算法,也就是从最大面值的硬币开始用。但是贪心算法只关注当前的最优解,所得结果不一定是全局最优解。举个例子,当面值为1、2、7、8、12、50时,我们如果需要支付15元,用贪心算法来算的话,就会出现12、2、1的结果,需要三枚硬币。但是事实上,我们只需要7、8元面值的两枚硬币就够了。所以,硬币问题可以用动态规划来求解。用c[i]来存储硬币的面值,用T[j]来存储支付j原创 2021-09-07 20:18:24 · 2225 阅读 · 0 评论 -
扩展欧几里得算法
欧几里得算法欧几里得算法是用来求最大公约数的,gcd(a,b)=gcd(b, a%b),如此递归下去,直到a%b==0,然后返回。最终,gcd(a,b)=gcd(c,0),其中,a,b的最大公约数就是c扩展欧几里得算法(exgcd)扩展欧几里得算法是解决诸如:求整数x和y使得ax+by=gcd(a,b)的问题的。这里借用oi-wiki中的证明:然后,代码如下:int Exgcd(int a, int b, int &x, int &y) { i.原创 2021-09-07 20:17:59 · 203 阅读 · 0 评论 -
POJ3255:求解[次短路]->Dijkstra
题目:http://poj.org/problem?id=3255RoadblocksTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 28456 Accepted: 9683DescriptionBessie has moved to a small farm and sometimes enjoys returning to visit one of her best friends. She does not wan原创 2021-08-31 22:32:30 · 118 阅读 · 0 评论 -
POJ1182(食物链):种类并查集
Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是”1 X Y”,表示X和Y是同类。第二种说法是”2 X Y”,表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。1)原创 2021-08-31 20:25:16 · 124 阅读 · 0 评论 -
二分图最大匹配问题(匈牙利算法)
什么是二分图如果一个无向图的的顶点可以分为两个互不相交的子集A和B,那么它就是二分图。也就是说,A、B内部不存在连边,所有连边都一头连着A中的顶点,另一头连着B中的顶点。什么是二分图最大匹配?二分图最大匹配问题,就是在A、B这两个集合中,不断选择两个存在连线的点,把他们连起来,求最多可以有多少条连线的问题。怎么解?匈牙利算法的核心在于:从A集合中选择一个点,然后将与其相连的B中的点依次对照,如果B中的点尚未匹配,那就将这两个点进行匹配,然后遍历A中的下一个点。接着继续访问与其相连的B原创 2021-08-31 20:21:46 · 1067 阅读 · 0 评论 -
【题解】Gym – 102307C Common Subsequence
题目:Manuel thinks that Diego is his long lost brother. But Diego thinks Manuel is wrong, and to prove it, he got DNA samples from himself and Manuel. Now Diego has given you the DNA samples and it is your task to say whether they are brothers or not.Th原创 2021-08-31 20:19:53 · 187 阅读 · 0 评论 -
【题解】HDU7046(数学推导)
题目:https://acm.hdu.edu.cn/showproblem.php?pid=7046题目来源:2021“MINIEYE杯”中国大学生算法设计超级联赛(7)题目大概要求就是求按照给定的规则画出的图形的凸包大小。乍一看是计算几何的题目,然后再细想,其实就是一题数学推导的题目。先画出内容,然后手动推一下边长的公式,然后就可以推出面积公式,直接计算就可以了。AC代码#include <bits/stdc++.h>using namespace std;原创 2021-08-31 20:17:01 · 101 阅读 · 0 评论 -
树形DP简介
树形dp就是在树上进行的dp。由于树具有递归的性质,因此树形dp一半都是用递归的方式进行的。问题的大意是,选了父节点,那么它的直接子节点就不能被选择,求总的权值的最大值。题目:P1352 没有上司的舞会这题是树形dp的板子题,每个节点都有被选择和不被选择两种情况。用数组dp[n][0]记录第n个节点不被选择的情况,用数组dp[n][1]记录被选择的情况。那么就有状态转移方程dp[n][0] = Σ(max(dp[x][0],dp[x][1]),其中,x是n的所有子节点dp[n原创 2021-06-13 22:59:54 · 3697 阅读 · 0 评论 -
动态规划之最长递增子序列
最长递增子序列的问题就是:给定序列A=a0,a1,a2,…,an,如果它的子序列b1,b2,…,bn满足b1<b2<b3<…<bn则称这个子序列是一个递增子序列。A的所有子序列中,最长的那个就是最长递增子序列(LIS)这是一个经典的动态规划问题,我们可以用两种方法来解决。第一种是比较笨的纯dp算法。时间复杂度为O(N2).假设原序列存储于A[n+1]中,注意,序列从A[1]开始存储方法是使用两个数组:L[n+1] 用于存储A[1]到A[i]中,部原创 2021-04-06 23:04:22 · 1414 阅读 · 1 评论 -
计算几何之线段相交问题(平面扫描)
给出n条平行于x轴或y轴的线段,输出其交点数求n条线段的交点,可以用抽选配对的方式来遍历所有的情况,这样子时间复杂度为O(n2).与轴平行的线段相交问题(曼哈顿几何)可以通过平面扫描(sweep)高效求解。平面扫描算法的思路是将一条与x轴(y轴)平行的直线向上(向右)平行移动,在移动过程中寻找交点,这条直线被称为扫描线。扫描线在每次遇到平面上线段的端点的时候停止移动,并且检查该位置上的线段交点。为了进行上述的处理,我们需要先将输入的线段的端点按照y的大小进行排序,然后让扫描线向y轴正向移原创 2021-03-18 21:03:31 · 800 阅读 · 0 评论 -
计算几何之点的内包
在计算几何中,判断点是否内包于多边形之中,就是点的内包问题。解决的思路就是,对于给定点p,作一条沿x轴正方向的射线,然后计算这条射线与多边形的边相交的次数。首先判断点p是否在边上,如果在边上的话就直接return如果相交的次数是奇数,那么它就是内包的。否则,点处于多边形的外部。具体求相交次数的方法就是遍历多边形上相邻的两点gigi+1,设向量a = gi– p, b = gi+1– p如果a的y坐标大于b的y坐标,那么就交换a、b这时,如果a、b的外积为正,且a、b的y坐标...原创 2021-03-09 22:32:04 · 141 阅读 · 0 评论 -
E-Early Orders 题解
前两天打了2021年度训练联盟热身训练赛第一场这个e题还是蛮不错的链接:https://ac.nowcoder.com/acm/contest/12606/E样例输入链接:https://ac.nowcoder.com/acm/contest/12606/E来源:牛客网示例1输入6 3321313输出2 1 3示例2输入10 55432141155输出3 2 1 4 5题意大概是:给出一段数字序列,要求按照顺序取元素组成原创 2021-03-09 12:18:10 · 177 阅读 · 0 评论 -
动态规划之0-1背包问题
01背包问题,说白了就是小偷背了个包去偷东西,他背包空间是有限的,问他要怎么拿物品,才能使得总价值最大化?给出背包的最大负荷以及每种物品的质量、价值,问这个背包能最多装下多大价值的物品?这就是0-1背包问题,每个物品只有装与不装两种状态用dp[i][w]来表示前i个物品装入容量为w的背包的时候,总价值的最大值。那么,就可以得知:(其中,c[i]为物品i的价值)dp[i][w] = max(dp[i-1][w],dp[i-1][w-w[i]]+c[i])那么,这个问题就可以解决了。原创 2021-02-22 19:14:48 · 226 阅读 · 0 评论 -
计算几何之圆与圆的交点
计算圆与圆的交点,需要用到余弦定理步骤如下:求出两个圆的圆心距d 求出向量c2.c-c1.c与c1.c到某交点的向量夹角a 求出向量c2.c-c1.c与x轴的夹角t 那么,两个交点就分别是以c1.c为起点,大小为c1.r,角度为t+a、t-a的两个向量题目:CGL_7_EAC代码:#include <iostream>#include <cstdio>#include <math.h>using namespace std;#def..原创 2021-02-17 10:56:08 · 3217 阅读 · 0 评论 -
计算几何之求圆与直线的交点
求圆与直线的交点的方法是:求圆心c在直线l上的投影点pr 求出直线l上的单位向量e 根据r和pr的长度来计算出圆内线段部分的一半base 用pr±base*e即得到答案题目:CGL_7_DAC代码:#include <iostream>#include <cstdio>#include <math.h>using namespace std;#define COUNTER_CLOCKWISE -1 //逆时针#define CLOCK..原创 2021-02-17 10:51:38 · 3616 阅读 · 0 评论 -
计算几何之求两线段的交点
当两条线段有交点的时候,交点坐标可以用叉乘来求。思路就是连接线段的端点,构造向量,从而构造出相似三角形,然后求出交点在一条线段上的位置(用比例t来表示),然后再加到线段端点上就可以了。题目:CGL_2_CAC代码:#include <iostream>#include<cstdio>#include <math.h>using namespace std;#define COUNTER_CLOCKWISE -1 //逆时针#define CL原创 2021-02-17 10:50:26 · 1492 阅读 · 0 评论 -
计算几何之判断线段相交
判断线段相交可以用到之前讲的判断点与线段的位置关系的来实现。两条线段相交的充要条件是:两条线段都满足“另一条线段的两个端点分别位于当前线段的顺时针方向和逆时针方向”,那么这两条线段相交。这样的话,就能用之前的ccw来解决了。题目:CGL_2_BAC代码:#include <iostream>#include <math.h>using namespace std;#define COUNTER_CLOCKWISE -1 //逆时针#define C原创 2021-02-17 10:46:01 · 297 阅读 · 0 评论 -
最小生成树——克鲁斯卡尔算法
之前学了用普里姆算法来求最小生成树的权值和,但是它的时间复杂度为O(|V2|),使用优先级队列优化后,可以优化为O(|E|log|V|)。克鲁斯卡尔算法可以在O(|E|log|E|)的时间复杂度内,求出最小生成树克鲁斯卡尔算法的核心就是对边进行升序排序,然后从权值最小的边开始,加入最小生成树中,然后利用并查集,把最小生成树中的节点归为同一个集合。一条边只有当它的两个端点不在同一个集合中的时候,才能把它加入最小生成树中。题目:GRL_2_AAC代码:#include <..原创 2021-02-17 10:44:33 · 356 阅读 · 0 评论 -
树的直径
求一棵树的直径的方法就是,从一个顶点出发,找到离它最远的顶点s,然后从顶点s出发,找离他最远的节点t.那么,s、t之间的距离就是树的直径。对于加权无向树来说,树的直径就是s、t之间的路径上的边的权值相加。题目:GRL_5_AAC代码:#include <iostream>#include <vector>#include <queue>#include <string.h>#include <algorithm>u.原创 2021-01-31 22:54:33 · 96 阅读 · 0 评论 -
关节点
在连通图G中,如果删除了某个点u之后,得到的子图不连通,那么点u就被称为关节点。求关节点可以用dfs来求。具体就是用到了几个数组表名 意义 dfn[u] 节点u的dfs序 p[u] 节点u的父节点 low[u] (dfn[u]、u的子节点的low值的最小值、u的树枝边的dfn)的最小值 对于无向图来说:关节点的性质有两条:存在至少一条树枝边(u, v) low[v]>=dfn[u] 对于根结点需要特别判断,只要有多于一条树枝边则为割点对于原创 2021-01-31 18:24:54 · 1303 阅读 · 0 评论 -
拓扑排序(广度优先搜索实现)
有向无环图可以用来表示各种事物的顺序,比如工作顺序。一些事情必须在另一些事情完成之后才能开始进行。那么,为了获得正确的工作顺序(一件事情开始之前,必须保证它的前置条件全部满足),就需要用到拓扑排序。拓扑排序其实就是在有向无环图中,只要存在边(u,v),那就让u排在v前面。我们可以通过广度优先搜索或者深度优先搜索来实现拓扑排序。广度优先的思路就是对每个入度为0的且未被访问过的节点进行广度优先搜索。在搜索过程中,只要搜索了u与v之间的边,那就将v的入度减1,相当于删除边的操作。入度为零就代表着它原创 2021-01-31 16:53:17 · 1782 阅读 · 0 评论 -
全点对间最短路径(弗洛伊德算法)
之前学单源最短路径的时候,学到狄克斯特拉算法,我在想,如果对每个顶点都求它的单源最短路径,那不就可以得到全点对之间的最短路径了吗?这样算下来时间复杂度在O(|V|(|V|+|E|)log|V|)但是,狄克斯特拉算法有个问题,不能适用于权值为负数的边,所以,当有权值为负数的边的时候,需要用到弗洛伊德算法。弗洛伊德算法的时间复杂度为O(|V|3),其思想就是动态规划的思想。用A[i,j]来记录从节点i到节点j的最短路径。然后使用一个中间节点k,对于i到j的最短路径,有A[i][j] = min(A[i]原创 2021-01-31 14:24:43 · 1120 阅读 · 0 评论 -
范围搜索(kDTree)
范围搜索是从拥有多个属性的报表集合中,寻找具有特定属性且位于指定范围内的元素,这类问题被称为范围搜索。我们在这里要解决的是二维的范围搜索问题。在二维平面上给出一堆点,然后给出n个矩形框。要求输出在矩形框内的所有点的id。kDtree其实就类似于二叉搜索树(嗯其实差不多就是二叉搜索树)。题目是DSL_2_C我们需要建立2DTree,那就需要对x轴和y轴分别进行排序。实现方式就是,深度为偶数的时候以x轴为基准,深度为奇数时,以y轴为基准。其实这就是二维分割,可以看作是把对一块..原创 2021-01-29 18:22:11 · 1076 阅读 · 0 评论 -
高等数据结构之并查集
并查集是一种用互质的集合对数据进行分类管理的数据结构。并查集主要实现了两个功能:合并与查询我们用一个数组fa[i]来表示第i个元素所在集合的根节点。根节点的父节点指向它自身。初始的时候,我们把fa[i]=i,这样就初始化了n个互质的集合。然后当要合并两个节点x、y所在的集合的时候,就先找到他们的根节点(代表元),然后将一个集合的根节点指向另一个节点的根节点即可。判断两个元素所在集合是否相同,其实就是去找他们所在集合的代表元。代表元相同,那么就证明这两个元素在同一个集合里面。.原创 2021-01-29 13:40:43 · 334 阅读 · 0 评论 -
单源最短路径(狄克斯特拉算法)
在加权图G=(V,E)中,求给定顶点s,d之间各边权值总和最小的路径,这就是最短路径问题。这个问题主要分为两类:单源最短路径:在图G中,求给定顶点s到其他所有顶点di之间的最短路径 全点对间最短路径:在图G中,求“每一对顶点”之间的最短路径求单源最短路径,其实就是求从起点出发的最短路径生成树的过程。如果顶点s到G的所有顶点都存在路径,那么一定存在一棵以s为根,包含s到G所有顶点最短路径的生成树T。这种树就称为最短路径生成树。狄克斯特拉算法解决最短路径生成树问题,就需要用到狄克斯.原创 2021-01-28 17:05:08 · 1204 阅读 · 0 评论 -
博弈论之Nim游戏
•Nim游戏的形式:n堆石子(第i堆有a_i个石子),两人轮流取。每人每次选其中一堆取走任意多个石子(最少一个),无可取者失败。•结果:当且仅当时,先手必败(⊕为异或和,下同)。其它情况下先手必胜。•策略:游戏的结束状态(石子全部取完)时总体异或和为零,先手失败。未结束时,若总异或和不为零,先手每次选取石子最多的一堆,取剩至数量等于其余石堆的异或和,将总异或和置为零即可;若总异或和为零,无论先手方如何选取,所取的堆石子数必然会从等量于其余石堆的异或和减少,使总异或和不为零。Nim游戏其实原创 2021-01-27 14:01:31 · 480 阅读 · 1 评论 -
【因式分解】莫比乌斯函数
题目是这样子的莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出。梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号。(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数)。具体定义如下:如果一个数包含平方因子,那么miu(n) = 0。例如:miu(4), miu(12), miu(18) = 0。如果一个数不包含平方因子,并且有k个不同的质因子,那么miu(n) = (-1)^k。例如:miu(2), miu(3), miu(30) = -1,miu(1)原创 2021-01-27 13:59:56 · 396 阅读 · 0 评论 -
【板子】筛法求素数-线性筛
由于普通的筛法求素数的时候出现了一个数被多次标记的情况,所以效率比较低,我们可以使用线性筛来标记。线性筛中,每个数只被标记一次,时间复杂度为O(N)核心代码是下面这样的:(我下面这串代码求的是2-20000之间的素数)int num[MAXN];int prime[4 * MAXN] = {0};bool vis[4 * MAXN] = {false};int prime_cnt = 0;void Euler(){ for (int i = 2; i <= 20000;原创 2021-01-27 13:58:34 · 114 阅读 · 0 评论 -
【板子】计算一个数的因子的个数
今天做题的时候做了一道这个题,其中需要算一个数的因子的个数.Let’s denote d(n) as the number of divisors of a positive integer n. You are given three integers a, b and c. Your task is to calculate the following sum:Find the sum modulo 1073741824 (2^30).InputThe first line contai原创 2021-01-27 13:57:17 · 374 阅读 · 0 评论 -
从两道题来讨论一下模拟退火算法
今天上网课听了“连橘猫都能学会的计算几何”,感觉自己连橘猫都不如了…今天唯一听懂的新知识应该就是这模拟退火算法了。模拟退火算法是模拟钢铁才淬炼的时候的退火的过程温度变化的算法。钢铁在退火的时候,其中某一点的温度是在不断变化的,也就是反复横跳的。模拟退火算法模拟了这一过程,在模拟精度达到一定的时候,可以实现得到全局最优解。主要从两道题来讲。第一道是二维的最小覆盖圆,第二道是三维的最小覆盖球。最小覆盖圆的问题有几种解法:1、随机增量法 2、爬山算法 3、模拟退火算法随机增量法在原创 2021-01-27 13:54:07 · 235 阅读 · 0 评论 -
Trie字典树的巧用
字典树(Trie)是将若干个字符串建成一棵树,一条边有一个字符,从根节点出发的一条树链上的字符排起来就成了一个字符串,需要在单词的终点处打标记。今天做了一道题,和字符串没有半毛钱关系,但是也可以使用字典树的思路来求解。题目是这样子的The XOR Largest Pair题目描述在给定的 N 个整数 A1,A2,…,AN 中选出两个进行异或运算,得到的结果最大是多少?输入格式第一行一个整数 N。第二行 N 个整数 Ai。输出格式一个整数表示答案。样例Input Ou原创 2021-01-16 22:07:05 · 69 阅读 · 0 评论 -
【题解】差分数组-codeForces-1197C – Array Splitting
https://codeforces.com/contest/1197/problem/C题目大概意思是,给出一个不下降序列,定义cost是区间右端点的值减去区间左端点的值。要求把数组分为n段,求最小的cost。今下午训练的时候做到这道题我有点懵(毕竟我是菜鸡),然后就观察了一下,发现了一个小现象。把给出的数组的前后两个元素分别相减,就会得到一个新的数组。这个新数组的各个元素之和,就是某一段区间的cost。然后我大概连蒙带猜地,写了一段代码来解决这个问题。我最初的思路大概就是分成n段的话原创 2020-12-06 22:07:18 · 149 阅读 · 0 评论 -
【题解】codeforces-1194B
https://codeforces.com/contest/1194/problem/B这道题其实是一道思维题,主要是要把情况考虑清楚,然后在代码上把逻辑理顺,就能做出来。题目给出了cross的定义:所在行和列都全部被涂黑。这道题分析可以知道,要对每行和每列的白色格子进行计数,然后相加。然后,很自然的可以想到,如果行列相交的位置是白色格子,那么这个格子就被计数了两次,就需要在总数上减一。如果白色格子不是交点的话,那就直接输出最小需要涂黑的白色格子数量就好了。这道题我思路想出来很简单原创 2020-12-06 21:02:17 · 120 阅读 · 0 评论 -
算法与数据结构之图
图这种数据结构表现的是对象集合以及其间的关系的集合。图中的“对象”称为结点(Node)或者顶点(Vertex),通常用圆来表示。“关系”表示顶点与顶点之间的关系,称为边(Edge)。圆与圆之间的关系用连线或者箭头来表示。无向图无向图是边没有方向的图。可以用来表现朋友关系这一类的关系。有向图有向图是边有方向的图,比如可以用来表示一件事物的学习顺序,要先学会某样知识才能学下一样知识。加权无向图加权的“权”就是给边赋的值。有了权值,我们可以表示诸如两个地点之间的距离这样子的信息。原创 2020-12-02 09:27:34 · 432 阅读 · 0 评论 -
生成斐波那契数列的两种方法
记忆化递归我们会发现,如果直接使用递归来进行计算斐波那契数列,那会出现很多的重复计算,我们可以把已经计算过的数值进行保存,然后当每次计算的时候先判断是否存在已经计算好的数值。有的话就直接调用,没有的话就进行计算并保存这个值。#include<iostream>using namespace std;//记忆化递归long long dp[45];long long fib(int n){ if(n==1||n==0) return 1; if(dp[n])原创 2020-11-26 11:13:04 · 824 阅读 · 0 评论 -
【题解】动态规划法实现穷举搜索(ALDS1_5_A)
将算式的计算结果存储在内存中,在需要的时候直接调用这个结果,从而避免无用的重复计算,就能提高处理效率。动态规划就是属于这类的手法。之前有这样一道递归的穷举搜索题:题号:ALDS1_5_A来自http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_5_AExhaustive SearchWrite a program which reads a sequence A of n elements and an integ.原创 2020-11-25 17:46:47 · 166 阅读 · 0 评论 -
算法与数据结构之优先级队列
前面讲了最大最小堆,现在来讲下最大最小堆的用途——实现优先级队列复习一下:前面讲的最大最小堆的生成,是把一个数组转换成完全二叉树之后,才转换成最大最小堆的。然后生成的时候先从最下方的叶结点开始生成最大/最小堆。但是优先级队列的话,往往是原本没有任务在里面,然后再往里面一个个添加任务。这怎么实现呢?我们分析可以知道,当我们向数组的最后一位添加一个元素的时候,就相当于在一个最大/最小堆上加了一个元素。由于原本的就是最大/最小堆,我们只需要处理好当前插入的元素,使插入后仍然满足最大/最小堆的性质就可以原创 2020-11-25 16:51:12 · 134 阅读 · 0 评论 -
【题解】洛谷P1003铺地毯
题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有nn张地毯,编号从11到nn。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。输入格式输入共n + 2行。第一行,一个整数n,表示总共有nn张地毯。接下来的nn行中,第i+1...原创 2020-11-20 14:58:53 · 1469 阅读 · 0 评论 -
【题解】分治问题之区间合并
题目出自:http://noi.openjudge.cn/ch0204/7620/描述给定 n 个闭区间 [ai; bi],其中i=1,2,...,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1;2] 和 [2;3] 可以合并为 [1;3],[1;3] 和 [2;4] 可以合并为 [1;4],但是[1;2] 和 [3;4] 不可以合并。我们的任务是判断这些区间是否可以最终合并为一个闭区间,如果可以,将这个闭区间输出,否则输出no。输入第一行为一个整数n,3 ≤ n ≤ 5.原创 2020-11-19 21:46:09 · 1035 阅读 · 0 评论 -
算法与数据结构之最大/最小堆
这里涉及到了堆结构,作为引入,要先讲讲一种特殊的树结构——完全二叉树完全二叉树完全二叉树就是像下图一样的二叉树,所有叶结点的深度相同,并且所有内部结点都有两个子结点看这个图就很好理解什么叫完全二叉树了。真的很完美啊哈哈哈。但是,有另外一种树结构也叫做完全二叉树。准确来说就是近似是完全二叉树。长这样子:上面这种二叉树,叶节点的深度的最大差距是1,最下层叶节点都集中分布在这层最左边的若干位置上,那么这种二叉树我们也可以把它叫做完全二叉树。二叉堆上面这种类型的数据.原创 2020-11-18 18:52:03 · 338 阅读 · 0 评论