- 博客(10)
- 收藏
- 关注
原创 复习SECOND
文章目录1、前缀和1.1一维1.2二维前缀和2、差分2.1一维1、前缀和1.1一维思想就是用一个数组存储每个位置的前缀和,当需要求区间内的和时,a[r]-a[l-1] 即可;#include<bits/stdc++.h>using namespace std;const int N=1e5+10;int a[N];int main() { int n,m; cin>>n>>m; for(int i=1; i<=n; i++) { cin
2022-04-21 21:41:57
362
原创 复习FIRST
文章目录1、快速排序2、归并排序3、二分1、快速排序第一行输入n为数字个数: 5第二行输入n个数字为其排序:5 1 3 2 4快速排序是在先找定中间数a[m]的基础上,从左找比a[m]大的数,从右找比a[m]小的数,交换这两个数:经过第一次寻找后的状态: 2 1 3 5 4此时 i=0,j=3在(i<j)的情况下继续进行上一步直到跳出;跳出时i=3;这是为了保证在中间数的左右侧分别是比中间数小和大的数;注意:a[m]的值是可以变的,所以最后 j 的位置才是分割两部分的位置;此时
2022-04-08 21:54:10
310
原创 拓扑序列例题
题目:给定一个n个点m条边的有向图,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出-1。若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。输入格式第一行包含两个整数n和m接下来m行,每行包含两个整数x和y,表示点x和点y之间存在一条有向边(x, y)。输出格式共一行,如果存在拓扑序列,则输出拓扑序列。否则输出-1。数据范围1≤n,m≤10^5输入样例:
2022-02-15 00:01:07
455
原创 树和图(遍历)
深度优先遍历 例题:给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。输入格式第一行包含整数n,表示树的结点数。接下来n-1行,每行包含两个整数a和b,表示点a和点b之间存在一条边。输出格式输出一个整数m,表示重心的所有的子树中最大的子树的结点数目。数据范围1≤n≤105输入:
2022-02-13 20:03:09
100
原创 DFS和BFS
DFS(深度优先搜索)例题:代码:#include<iostream>using namespace std;const int N=10;int n,path[N];bool st[N];void dfs(int x) { if(x==n) {//进行完了执行输出 for(int i=0; i<n; i++) { cout<<path[i]; } cout<<endl; return; } for(in
2022-02-11 20:53:17
278
原创 两种哈希的理解
用数组存储就是将数映射到对值取模的数组上,将这个值定为质数能减少冲突。哈希——拉链法:#include<iostream>#include<cstring>using namespace std;const int N=100003;int e[N],ne[N],h[N],idx;void insert(int x) { int t=(x%N+N)%N; e[idx]=x; ne[idx]=h[t]; h[t]=idx++;}bool fi...
2022-02-09 18:00:44
713
原创 kmp的理解
题目:https://www.luogu.com.cn/problem/P3375其中最重要的数组就是ne [N],是用来存储以当前的前一个字符作为字符串结尾的border的长度以及前缀对应相等的字符的下标,例如字符:AABAAA此字符串在走过五次循环后的ne值分别为:1.A=A: 0 1;2. 0 1 0;3.A=A: 0 1 0 1;4.AA=AA:0 1 0 1 2;5.AA=AA:0 1 0 1 2 2;计算borde...
2022-02-04 23:24:31
584
原创 堆排序的作用
小根堆:给定一个整数x,请将x 加入到数列中。 输出数列中最小的数。 删除数列中最小的数(如果有多个数最小,只删除11个)。假设有七个数字1 3 6 7 2 5 4,进行堆排序:其中最重要的两个操作为down()://自上而下进行比较和交换void down(int x) { int t=x; if(x*2<=s&&h[x*2]<h[x]) t=x*2; if(x*2+1<=s&&h[x*2+1]<h[t]) t=.....
2022-01-28 17:59:43
1398
原创 并查集的作用
并查集的两个操作1、将两个集合合并2、询问两个元素是否在一个集合当中https://www.luogu.com.cn/problem/P3367int find(int x){ if(p[x]!=x) p[x]=find(p[x]); return p[x];}其中最重要的是find函数,是返回x的祖宗节点,加了路径压缩,使得每一个数指向的都是祖宗节点,在后期的查找中只要找一次就能找到。p[x]存储的是父节点,当p[x]=x时是根节点,return p[x]。输入样例:
2022-01-26 17:51:17
1443
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1