- 博客(30)
- 资源 (1)
- 收藏
- 关注
原创 C++ 树
树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:①有且仅有一个特定的称为根(Root)的结点;②当n>1时,其余结点可分为m(m>0)个互不相交的有限集T 1 {T}_{1}T 1 、T 2 {T}_{2}T 2 、… 、T m {T}_{m}T m ,其中每一个集合本身又是一棵树,并且称为根的子树(Sub Tree)。定义:树的直径是树上两点间距离的最大值。即树中最远的两个节点之间的距离被称为树的直径,连接这两点的路径被称为树的最长链。
2024-07-25 08:38:53 2850 5
原创 国庆普及模拟赛-3
错因:在调试数字为两位数时,经常出错,所以选择只考虑数字为一位数的情况,最终30分。思路:直接暴力模拟pos在哪,O( n^2)的算法绝对会爆,n<10^6。总结:本次考试反映出在字符串上面有很大问题,要转向复习,练题。T1:按照题目要求进行模拟,不用考虑复杂度。所以考虑使用前缀合(见代码)
2024-10-03 20:07:50 415
原创 2024.7.20csp-j第二场模拟赛赛后总结
若如此,它们同样也会消失(如果又有多个这样的区域,则同时消失),然后重力又会使得剩下的方块下落,这一过程持续进行,直到不存在大小至少为K的连通区域为止。然后他将桶 1 的牛奶倒入桶 2,然后将桶 2 中的牛奶倒入桶 3,然后将桶 3 中的牛奶倒入桶 1,然后再将桶 1 的牛奶倒入桶 2,如此周期性地操作,共计进行 100 次(所以第100 次操作会是桶 1 倒入桶 2)。他的三头获奖的乳牛,Bessie、Elsie 和 Mildred,各自产奶的口味有些许不同,他打算混合这三种牛奶调制出完美的口味。
2024-08-21 19:47:04 1295
原创 C++贪心算法
贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,得到的是在某种意义上的局部最优解。
2024-08-20 19:48:58 1002
原创 c++栈笔记
例如,当栈的参数是类时,push的参数必须是已实例化的类名作为参数,而 emplace 则可以直接使用类初始化参数现场初始化一个类实例加入栈顶。因此 emplace 的功能比 push 更强大,且兼容 push,但一般使用过程中,使用 push 就足够了。要放置的参数将作为参数转发给栈中所含的类的构造函数。如果类有默认构造函数,emplace 可以有一个参数、多个参数,或者根本没有参数。的,都是在栈顶加入一个元素,差别就是压栈元素的来源可能不同。首先 s.push() 与 s.emplace() 的。
2024-08-20 14:00:30 273
原创 模板与pair
而函数的参数类型是确定的,如果形参是 int 则不能处理 double 类型的数据。你需要使用模板编程。模板是泛型编程的基础, C++ 中的库容器、迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。完全理解模板,涉及的知识较广,所以我们不展开介绍,仅仅告诉大家什么是模板,如何使用模板,以及模板存在的意义。而上面 pair 的例子可以嵌套是因为 pair与 pair并不是相同的数据类型,因此不存在自己包含自己的情况。
2024-08-20 13:59:43 325 1
原创 容器与迭代器
容器迭代器功能解释vector随机访问deque随机访问双端队列,可以从前后 push,pop 元素list双向链表set/multiset双向multiset 是允许有重复元素的 set ,元素保持有序map/multimap双向multimap 是允许有重复元素的 map ,元素是 pair 保持有序stack不支持迭代器栈queuequeue不支持迭代器队列priority_queue不支持迭代器优先队列,每次可以从栈顶取出当前最小容器添加元素的效率删除元素的效率查找元素访问中间的元素vector加在
2024-08-20 11:24:48 531 1
原创 c++结构体
标准库中的 sort 是使用快速排序实现的,快速排序是一种非稳定排序,如果我们的比较函数只比较结构体的某一个值,则原有的顺序可能会被打乱,这点在我们写代码的时候要特别注意,有可能因为顺序问题造成计算结果的错误。需要做特殊的处理,可以在结构体中增加一个属性,专门用来记录在原始数组中的位置,在其它值相等的情况下,再比较这个位置数据,这相当于没有两个值是完全相等的,这种情况下稳定排序的结果与非稳定排序是相同的。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。
2024-07-26 11:36:07 709 1
原创 C++树(四)二叉树
二叉搜索树( Binary Search Tree )它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;能够快速查找数据也是二叉搜索树被用于各类数据结构的原因,但这种快速是有限制的,即不会出现退化,假如二叉搜索树退化为链表,则无法做到快速查找数据的要求,所以又出现了平衡二叉树。遍历二叉树的方法可以沿用遍历树的方法——递归。
2024-07-25 08:38:10 1927
原创 c++树(三)重心
在线性的序列[1,n]中,我们在考虑用分治 思想处理问题时,需对问题进行划分。在划分问题时若要更加均匀,我们选择中 点mid可以更加高效。这样得到[1,mid],[mid+1,n]两个子序列, 因为子序列中元素的个数思考:在树中我们同样可以选择一个点,将该点及该点连 边删除后得到一些子树,那么要使得问题更加均匀的划分, 选的点应具备什么要的性质?概念:找到一个点,使得最大子树的值最小。求解方法:一次dfs记录子树的大小,来边通过n-sz[]解决,可求出当前点的最大子树大小,记录能产生最大子树值最小的点。
2024-07-25 08:37:48 1262
原创 c++树(一)定义,遍历
树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:①有且仅有一个特定的称为根(Root)的结点;②当n>1时,其余结点可分为m(m>0)个互不相交的有限集T 1 {T}_{1}T 1 、T 2 {T}_{2}T 2 、… 、T m {T}_{m}T m ,其中每一个集合本身又是一棵树,并且称为根的子树(Sub Tree)。
2024-07-25 08:37:02 877
原创 C++笔记5
如果 du==dis[u],遍历 u 能到达的所有节点 v,假设 u−>v 的边权为 c,比较 dis[v] 和 dis[u]+c 的大小,如果 dis[v]>dis[u]+c ,令 dis[v]=dis[u]+c,并把 (v,dis[v]) 放入优先队列。这里用到了动态规划的思想,依次求 p[1],p[2],p[3]...p[n] 的值,在要求解 p[i] 时,之前的 p[] 值已经得到了,我们就可以利用回文串的性质和之前的 p[] 值来对求解 p[i] 的过程进行优化。
2024-07-25 08:22:30 925 1
原创 c++笔记4
第一次合并大的集合和绿色这个点,之后查询红点,红点路径的长度为O(log(n)),所以查询一次的复杂度为O(log(n)),而路径压缩之后整棵树又变成左下角的结构,如果再一次和一个绿点合并之后再查询红点,复杂度还是O(log(n))的,这就导致产生一个循环,用这样的合并和查询就可能导致不按秩合并的并查集的复杂度降到O(nlog(n))。我们不需要做任何的预处理,每次查询的时候,我们从2个节点分别向他们的根结点走,如果最终根节点是同一个,则表明两个节点在同一棵树中,否则是不同的两棵树。
2024-07-25 08:22:00 1000 1
原创 c++笔记3
记忆化搜索就是在搜索时记录一些有用的答案, 我们递归的本质就是在搜索答案,但是有些问题会被重复的搜索,所以我们就可以用空间换时间的思想, 将被搜索的问题的答案记录下来, 当下一次再被搜索到这个问题的时候, 就可以在。单调队列,即单调递减或单调递增的队列。根据记忆化搜索的思想,它是解决重复计算,而不是重复生成,也就是说,这些搜索必须是在搜索扩展路径的过程中分步计算的题目,也就是“搜索答案与路径相关”的题目,而不能是搜索一个路径之后才能进行计算的题目,必须要分步计算。
2024-07-25 08:21:21 1542 1
原创 c++笔记1
标准库中的 sort 是使用快速排序实现的,快速排序是一种非稳定排序,如果我们的比较函数只比较结构体的某一个值,则原有的顺序可能会被打乱,这点在我们写代码的时候要特别注意,有可能因为顺序问题造成计算结果的错误。需要做特殊的处理,可以在结构体中增加一个属性,专门用来记录在原始数组中的位置,在其它值相等的情况下,再比较这个位置数据,这相当于没有两个值是完全相等的,这种情况下稳定排序的结果与非稳定排序是相同的。同时也是一些元素的集合,这些元素称为结构体的成员,且这些成员可以为不同的类型,成员一般用名字访问。
2024-07-25 08:18:27 858 1
原创 P1047 [NOIP2005 普及组] 校门外的树
已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。某校大门外长度为 ll 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 ll 的位置;第三遍,顺序访问路上的树,只要没访问过,计数加1,这样就求出了路上所有还存在的树的数目。接下来 mm 行,每行两个整数 u, vu,v,表示一个区域的起始点和终止点的坐标。第二遍,读入区间的头和尾,从这个区间的头开始循环,到尾结束,标记为访问过。
2024-04-21 16:16:16 559
c++笔记(包含大多数知识点
2024-08-20
c++自创游戏:癫佬闯江湖
2024-07-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人