
2021初学算法
ACM知识点学习
SmallKa0
CCPC银牌 ICPC银牌 双非acmer
展开
-
寒假训练1STL
2021.1.20 STL总结竞赛常用语言C++上学期学习的是c语言,对于C++了解不多,但今后要开始尝试用C++来写代码。1.输入 cin 输出cout2.万能头文件 #include<bits/stdc++.h>3.数组开大放在全局4.#include<iostream> #include<cstdio> #include<algorithm> using namespace std;时间复杂度如果用T(n)函数来表达重复执行原创 2021-01-20 20:56:52 · 86 阅读 · 0 评论 -
寒假训练2并查集
并查集概念:并查集由一个整型数组pre[ ]和两个函数find( )、join( )构成数组pre[ ]记录了每个点的前导点是什么,函数find(x)用于查找,函数join(x,y)用于合并作用:并查集的主要作用是求连通分支数(如果一个图中所有点都存在可达关系(直接或间接相连),则此图的连通分支数为1;如果此图有两大子图各自全部可达,则此图的连通分支数为2……int find(int x) //查找老大{ while(pre[x] != x) x = pre[x];原创 2021-01-21 13:05:30 · 64 阅读 · 0 评论 -
寒假训练3二分法
二分法二分法的主要思想就是在排完序的数组中对半查找,快速运算。我们定义一个左端点为L,右端点为R,M为L,R中点,那么对于查找关键字Key,我们用M位置的对应值来跟他作比较,会有三种情况(1)a[M]<key,那么我们查找的Key肯定在M右半边区域,所以此时我们将L=M+1(2)a[M]>key,那么我们查找的Key肯定在M左半边区域,所以此时我们将R=M-1(3)a[m]=key,那么我们找到了,直接跳出,此时M就是key值所在的位置我们对于这个新的区间再次进行查找,直到找到我们要原创 2021-01-22 14:24:07 · 53 阅读 · 0 评论 -
寒假训练4线段树
单点修改#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 50010;struct segmentTree { int l, r, sum;} node[N << 2];int a[N], kase;void pushUp(int i) { node[i].sum = node[i<<1原创 2021-01-25 21:55:59 · 71 阅读 · 1 评论 -
寒假训练5贪心算法
1.贪心算法简介1.1 基本定义在贪婪算法(greedy method) 中,我们要逐步构造一个最优解。每一步,我们都在一定的标准下,做出一个最优决策。做出决策所依据的标准称为贪心准则(greedy criterion)。贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法每一步必须满足以下条件: 1、可行的:即它必须满足问题的约束。 2、局部最优:他是当前步骤中所有可行选择中最佳的局部选择。原创 2021-01-26 14:44:51 · 77 阅读 · 1 评论 -
寒假训练6dp入门
dp数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位…数的每一位就是数位啦!之所以要引入数位的概念完全就是为了dp。数位dp的实质就是换一种暴力枚举的方式,使得新的枚举方式满足dp的性质,然后记忆化就可以了。基础模板#include <iostream>#include <cstring>#include <str原创 2021-01-27 17:15:01 · 204 阅读 · 0 评论 -
寒假训练7搜索
搜索dfs1)算法原理深度优先搜索(Depth First Search),是图遍历算法的一种。用一句话概括就是:“一直往下走,走不通回头,换条路再走,直到无路可走”。具体算法描述为:选择一个起始点 u 作为 当前结点,执行如下操作:a. 访问 当前结点,并且标记该结点已被访问,然后跳转到 b;b. 如果存在一个和 当前结点 相邻并且尚未被访问的结点 v,则将 v 设为 当前结点,继续执行 a;c. 如果不存在这样的 v,则进行回溯,回溯的过程就是回退 当前结点;上述所说的 当前结点 需要用原创 2021-01-27 17:24:24 · 59 阅读 · 0 评论 -
寒假训练8hash
hashHash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录原创 2021-01-31 12:15:25 · 65 阅读 · 0 评论 -
寒假训练9最短路入门
最短路dijkstra#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include<bits/stdc++.h>#define min(a,b) (((a)<(b)) ? (a):(b))int dis[1001][1001];const int inf=0x3f3f3f3f; int main(int arg原创 2021-01-31 12:23:25 · 63 阅读 · 0 评论 -
寒假训练10最小生成树
模板prim#include<stdio.h>#include<algorithm>using namespace std;const int maxn=100010;int set[maxn];int mark[maxn];int flag;int dis[maxn];struct node{ int a,b,l;};node dot[maxn];bool cmp(node a,node b){ return a.l<b.l;}原创 2021-01-31 12:32:08 · 71 阅读 · 0 评论