![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM算法
从大一开始的ACM基本算法
凯撒袁六兽
9102年初入林大大一计算机系
展开
-
2021牛客暑期多校训练营5-6
牛客5K King of Range思路:对于每个询问,枚举r,找到第一个不符合条件的l;可以知道l是只会右移的;用单调队列维护递减的最大值,递增的最小值,就可以判断当前l是否符合条件了。#include <bits/stdc++.h>using namespace std;typedef long long ll;int const N=1e5+5;int n,m,,hdx,tlx,hdn,tln;int a[N],mx[N],mn[N];ll ans;int main(原创 2021-08-05 23:06:11 · 118 阅读 · 0 评论 -
2021牛客暑期多校训练营2(未完)
D:Er Ba Game题目链接题意:两个人打牌:每人可以选两点,然后用线将两点连接起来,注意在连线的时候不能围成封闭图形。那么就是谁先连线围成封闭图形谁就输了。思路:可以知道不围成封闭图形的线段总数量等于点的总数-1,不妨设不围成封闭图形的线段总数量为sum,则有:sum%2=1, 先手赢;sum%2=0, 后手赢;#include<bits/stdc++.h>using namespace std;int main(){ int n,m; cin>>原创 2021-07-23 01:36:12 · 105 阅读 · 0 评论 -
2021牛客暑期多校训练营1(未完)
Ball Dropping:题目链接思路:利用相似三角形的比例求解,稍微把图画一下就行了#include<bits/stdc++.h>using namespace std;int r,a,b,h;int main(){ scanf("%d%d%d%d",&r,&a,&b,&h); if(2*r<b){puts("Drop");return 0;} else puts("Stuck"); double x=原创 2021-07-23 01:08:09 · 84 阅读 · 0 评论 -
树与图的存储方法(邻接矩阵和前式链向星)
树与图的存储方法一般有两种:邻接矩阵邻接表其中邻接矩阵适合存储稠密图,邻接表适合存储稀疏图。邻接矩阵:邻接矩阵是表示顶点之间相邻关系的矩阵,若一个图G有n个节点,那么邻接矩阵A的大小则为n×n,其中定义,若有一点u到v之间有边,则A[u][v]=1,否则为0。所以邻接矩阵就是一个二维数组,其中下标u,v表示u到v的边,二维数组位于u行v列的值表示存不存在从u到v的边,如果有就为1,没有就为0。邻接表:邻接表的本质是n个单链表,看了网上的博客觉得讲的都不是人听的话(一定是我太菜了 )。邻原创 2020-12-10 11:22:40 · 681 阅读 · 1 评论 -
网络流(入门)-概念
相关概念介绍:这里的相关概念引用的是yxc大佬的讲解,在这里特别感谢yxc大佬的算法课,让我入了算法竞赛的门。1.1:流网络:G=(V,E)特点:是一个有向图,且可以有环,不考虑反向边(即使有反向边,也可以通过加点来把一条反向边,变成两条单向边)。组成:源点,容量,汇点。源点可以认为是起点,类比与水库,可以源源不断地向外输水。容量可以理解为离散数学的边权,类比与流速即单位时间内流过的最大的水量的大小。如果边不存在则认为容量是0。汇点可以认为是终点,类比与大海,从水库里流出来的水,会源源不断原创 2020-11-10 19:09:44 · 3820 阅读 · 5 评论 -
高精度算法(加减乘除)
在遇到一些例如1e^100000这样的数据的时候,我们无法处理,那么我们需要高精度来处理,用long long都没有办法处理,利用高精度处理方法是用字符串的手法处理。高精度加法:思路:就是我们人类的加法,从最小位数开始,先算好以后再进行进位操作即可,考虑进位的问题。#include<bits/stdc++.h>using namespace std;const int N=1e6+10;vector<int>A,B;string a,b;vector<int&原创 2020-11-08 19:03:07 · 172 阅读 · 0 评论 -
排序——归并排序
定义: 归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。思想: 先将一个元素个数为n的随机序列进行有限次的分割,每分割一次便得到一个新的序列单元,那么进行有限次的分割以后,则得到n个长度为1的序列单元,相当于将这n个元素分割成一个一个元素,那么在这最小的序列单元中,当前原创 2020-10-12 11:10:40 · 123 阅读 · 0 评论 -
并查集-最小生成树,带权并查集,种类并查集。
并查集:一:并查集的定义二:并查集的过程以及基本操作三:并查集的应用:对于定义的使用——判断图是否是树最小生成树问题四:相应的题目并查集的定义: 并查集是一种树型的数据结构,用于动态处理一些不相交集合(Disjoint Sets)的合并及查询问题。并查集的过程以及基本操作:过程: 运用并查集的过程就是先将每一个元素看成一个独立的集合,这个时候每一个集合的标识,再将不同的元素(集合)两两合并到一个集合当中,这就是并查集的合并,在合并的过程中这两个元素就连接在一起了,其中一个元素变成儿子原创 2020-07-14 21:33:04 · 473 阅读 · 1 评论 -
高效的遍历方法---尺取法
尺取法本质: 尺取法的本质实际上是一种高效模拟,它其实也是一种暴力枚举的方法,但是这种枚举更加的高效。过程: 通过两个指针l,r的移动,去不断地截取满足自己条件的区间,首先是是右指针的移动,移动到初步所满足的区间内,右指针保持不动,移动左指针进行判断,这个时候出现两种判断结果,第一种是这种左移是符合条件的,那么保持右指针不变,左指针继续向左移动;第二种是这种左移是不符合条件的,那么继续右指针的移动,直到符合条件位置。不断重复这种过程,最后完成所有的遍历。放一张图出来,聪明的你应该就能看懂了。何时选原创 2020-05-22 20:13:37 · 663 阅读 · 0 评论 -
搜索初步—二进制枚举
二进制枚举初步1. 过程:枚举是将所有的可能性举出,然后根据自身的条件,将符合自己目标的可能性筛出的过程,将所有可能性举出的方法有很多,二进制枚举是运用二进制位运算将所有可能性举出的过程。2.实质:是通过二进制运算,将已有数据进行有限次的排列组合的过程,用于解决几种或多种情况组合的问题。3.模板代码(我现在还没有办法解释原因,但我迟早会回来修正的!!!)一共有n个数字,从中选组若干个数...原创 2020-01-03 18:27:58 · 183 阅读 · 0 评论 -
搜索初步-暴力枚举总结与举例
暴力枚举一.过程:暴力枚举是将所有情况都进行枚举出,并找到自己的目标的值的过程。二.方法:1.用多重循环嵌套,用来寻找在一个数组中的一个值是否与其他的一个或多个值相关。(这里的相关表示为加减乘除等数学关系)2.用单层循环嵌套,将某个特殊数值类型在一个范围内的表打出,例如素数表,回文数表,丑数表等;或者统计某个数值类型出现的次数。三.举例1.丑数Description:只有质数2...原创 2020-01-02 19:47:21 · 253 阅读 · 0 评论 -
LCM与快速取模运算模板
LCM与快速取模运算模板一. LCM取最小公倍数模板。公式:两数a,b的最小公倍数等于两数相乘除以两数的最大公倍数。代码:#include<bits/stdc++.h>using namespace std;int lcm(int a,int b){ int ans; ans=a/__gcd(a,b)*b; return ans;}int ma...原创 2020-01-04 18:41:59 · 638 阅读 · 0 评论 -
求一个数的因子和:唯一分解定理
原理:唯一分解定理:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N等于P1的a1次方乘以P2的a2次方一直乘到Pn的an次方,这里P1<P2<P3…<Pn均为质数,其中指数ai是正整数。因此我们可以用等比数列求和公式去简化求个过程:思路:我们先找出N的素因子,再让N不断地除以这个素因子,直到除不动为止说明这个素因子的取完了,再进行下一个素...原创 2020-02-21 22:31:19 · 336 阅读 · 1 评论 -
STL容器-Vector(三)
介绍:1.vector直接翻译为“向量”,一般说成“变长数组”,也即“长度根据需要而自动改变的数组。2.在竞赛中,有些题目需要定义很大的数组,这样会出现“超出内存限制”的错误。比如,如果一个图的顶点太多,使用邻接矩阵就会超出内存限制,使用指针实现邻接表又很容易出错,而使用vector实现简洁方便,还可以节省存储空间。如何使用vector:1.添加vector头文件,即#include &l...原创 2020-02-29 14:28:00 · 164 阅读 · 0 评论 -
STL容器-Set(二)
介绍:1.set 翻译为集合,是一个内部自动有序且不含重复元素的容器。2.既然set是一个集合,那么set 中的元素是唯一的,满足集合元素的互异性,其内部采用“红黑树”实现。使用方法:1.添加头文件: #include < set >2.必须要有“using namespacestd”3.定义一个set:set< typename > name;其中type...原创 2020-02-27 21:16:59 · 168 阅读 · 0 评论 -
STL容器-Map and Pair(一)
map介绍:1.map翻译为映射,是STL中的常用容器也是STL的一个关联容器,它提供一对一的数据处理能力。什么是一对一的数据处理能力呢,像我们查字典,我们可以从开头处找到这个单词对应的页数,从而通过页数找到单词,那么页数-单词就形成了一 一对应的关系。2.一维map的定义为map< typename1,typename2 > name,其中,typename1是映射前的类型(...原创 2020-02-26 17:33:15 · 332 阅读 · 0 评论 -
素数筛的三种写法
素数筛思路:利用桶排序将范围的数都先标记为1,然后通过计算素数的倍数把和数计算出来,然后将和数标记为0。时间复杂度:n*lgn优点:思路清晰,容易手写。缺点:是三种写法里最慢的一种。#include <bits/stdc++.h>using namespace std;const int N=1e7+10;int prime[N];//prime数组储存:素数bool...原创 2020-02-21 18:57:20 · 286 阅读 · 0 评论 -
三种排序方法:冒泡排序,选择排序,sort()函数排序
三种原创 2020-04-14 18:10:11 · 2185 阅读 · 0 评论 -
排序初步-桶排序与桶排序举例
桶排序1. 过程与实质:过程: 定义一个长度比最大输入值大的数组且该数组的每个元素都为零,将数组的每个元素看作铁桶,将输入的值看作旗子,然后对应该输入值的位置的数组元素自增一,当结束输入后,遍历整个数组便可以得到每个桶里的旗子数,即每个数值出现的次数。实质: 桶排序实质是将旗子插入桶里,以便统计旗子的个数的过程。2. 优点可以实现一边输入一边统计个数,不需要先排序统计个数,时间复杂度更...原创 2020-01-01 20:20:46 · 239 阅读 · 0 评论 -
搜索初步--冒泡排序加二分法与选择排序加二分法
搜索初步–冒泡排序加二分法与选择排序加二分法介绍:线性搜索的方法即将数组从头到尾遍历以找到目标,但如果数据量过于庞大且目标在其中为随机存在,则会使搜索效率大大降低,因此我们可以用更加高效的方法解决该问题,即二分法搜索。本文思路:1.二分法2.冒泡排序法与选择排序法。3.冒泡排序加二分法与选择排序加二分法。(为标题而来直接往下拉)##二分法大前提:是一组从小到大的数组,类比于平面直角...原创 2019-12-26 11:25:44 · 214 阅读 · 0 评论