03 2022 档案

摘要:P3391 【模板】文艺平衡树 //非旋转treap #include<bits/stdc++.h> using namespace std; const int N=10e5+5; int ch[N][2],tag[N],val[N],siz[N],key[N]; int tn,root,n,m; 阅读全文
posted @ 2022-03-29 18:36 心悟&&星际 阅读(15) 评论(0) 推荐(0) 编辑
摘要:P3369 【模板】普通平衡树 //AVL树题解 #include<bits/stdc++.h> using namespace std; typedef struct AVLTreeNode{ int key;//键值 int height;//树的高度 int size;//树的大小 int c 阅读全文
posted @ 2022-03-27 22:15 心悟&&星际 阅读(39) 评论(1) 推荐(0) 编辑
摘要:P6136 【模板】普通平衡树(数据加强版) //非旋转的Treap树 #include<bits/stdc++.h> using namespace std; const int INF=0x7fffffff; struct Node *nil; // 自定义的空指针,防止翻车(RE) struc 阅读全文
posted @ 2022-03-27 18:18 心悟&&星际 阅读(37) 评论(0) 推荐(0) 编辑
摘要:核心操作:分裂与合并1.分裂(split)有两种:按权值分裂与按位置(排名)分裂如果按权值分裂(split):那么分出来两棵树的第一棵树上的每个数的大小都小于(或者小于等于,视具体情况)x。如果按位置分裂(split):那么分出来两棵树的第一棵树上恰好有x个结点。 //按权值分裂 inline vo 阅读全文
posted @ 2022-03-25 11:00 心悟&&星际 阅读(21) 评论(0) 推荐(0) 编辑
摘要:P5020 [NOIP2018 提高组] 货币系统 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int MAXAI=25005; const int MAXN=105; int f 阅读全文
posted @ 2022-03-24 09:27 心悟&&星际 阅读(24) 评论(0) 推荐(0) 编辑
摘要:p1616 疯狂的采药 #include<iostream> #include<vector> using namespace std; const int Maxn=10000001; int a[Maxn],b[Maxn],dp[Maxn]; int main() { // freopen("p 阅读全文
posted @ 2022-03-24 09:24 心悟&&星际 阅读(22) 评论(0) 推荐(0) 编辑
摘要:完全背包 此类背包问题中,我们的每种物品有无限多个,可重复选取。 类似于01背包,我们依旧需要考虑前i-1件物品的影响。 此时我们依旧可以设得二维状态 f[i][v]代表用i件物品填充为体积为v的背包得到的最大价值 依旧很容易写出状态转移方程 f[i][v]=max(f[i−1][v],f[i−1] 阅读全文
posted @ 2022-03-24 09:21 心悟&&星际 阅读(34) 评论(0) 推荐(0) 编辑
摘要:P1177 【模板】快速排序 #include<bits/stdc++.h> using namespace std; typedef struct AVLTreeNode{ int key; int height; AVLTreeNode* left; AVLTreeNode* right; AV 阅读全文
posted @ 2022-03-22 20:25 心悟&&星际 阅读(19) 评论(0) 推荐(0) 编辑
摘要:P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G #include<bits/stdc++.h> using namespace std; typedef struct AVLTreeNode{ int key; int height; 阅读全文
posted @ 2022-03-22 20:21 心悟&&星际 阅读(33) 评论(0) 推荐(0) 编辑
摘要:P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G这是一道贪心算法的题目,用BST维护有序性,每次取最小值,并删除,取两次合并为新的一堆,进行n-1次,这样就合并为一堆了统计过程每一次的大小。指针版 #include<bits/stdc++ 阅读全文
posted @ 2022-03-21 20:05 心悟&&星际 阅读(62) 评论(0) 推荐(0) 编辑
摘要:P1926 小书童——刷题大军 #include<iostream> #include<algorithm> using namespace std; int dp[200]; int a[20],b[20],c[20]; int n,m,k,r; int main() { cin>>n>>m>>k 阅读全文
posted @ 2022-03-21 08:25 心悟&&星际 阅读(33) 评论(0) 推荐(0) 编辑
摘要:P2639 [USACO09OCT]Bessie's Weight Problem G #include<iostream> using namespace std; long long dp[45001]; int s[501]; int main() { int N,H; cin>>H>>N; 阅读全文
posted @ 2022-03-21 08:24 心悟&&星际 阅读(18) 评论(0) 推荐(0) 编辑
摘要:P2871 [USACO07DEC]Charm Bracelet S #include<iostream> using namespace std; long long dp[12881]; int D[3500],W[3500]; int main() { int N,M; cin>>N>>M; 阅读全文
posted @ 2022-03-21 08:22 心悟&&星际 阅读(28) 评论(0) 推荐(0) 编辑
摘要:P2925 [USACO08DEC]Hay For Sale S #include<iostream> using namespace std; long long dp[50001]; int h[5001]; int main() { int C,H; cin>>C>>H; for (int i 阅读全文
posted @ 2022-03-21 08:21 心悟&&星际 阅读(21) 评论(0) 推荐(0) 编辑
摘要:P1802 5 倍经验日 #include<iostream> #include<cstring> using namespace std; const int Maxn=1100; long long dp[Maxn],lose[Maxn],win[Maxn],used[Maxn]; long l 阅读全文
posted @ 2022-03-21 07:15 心悟&&星际 阅读(15) 评论(0) 推荐(0) 编辑
摘要:P1877 [HAOI2012]音量调节 #include<cstdio> using namespace std; int n,begin,maxlevel; int ans; int a[51]; bool f[51][1001]; int main() { scanf("%d%d%d",&n, 阅读全文
posted @ 2022-03-21 07:10 心悟&&星际 阅读(29) 评论(0) 推荐(0) 编辑
摘要:P1510 精卫填海 #include<iostream> using namespace std; long long dp[45001]; int s[10001],t[10001]; int main() { int v,n,c; cin>>v>>n>>c; for (int i=1;i<=n 阅读全文
posted @ 2022-03-21 07:06 心悟&&星际 阅读(29) 评论(0) 推荐(0) 编辑
摘要:P1048 [NOIP2005 普及组] 采药解法一 #include<iostream> #include<cstring> using namespace std; const int Maxn=110; const int Maxv=1010; int V,n,ans=0; int w[Max 阅读全文
posted @ 2022-03-21 07:03 心悟&&星际 阅读(112) 评论(0) 推荐(0) 编辑
摘要:01背包给定 n 件物品,物品的重量为 w[i],物品的价值为 c[i]。现挑选物品放入背包中,假定背包能承受的最大重量为 V,问应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?搜索算法状态i表示考虑第i件物品,v表示当前背包重量,C表示当前最大价值。dfs(i,v,C)调用方式dfs 阅读全文
posted @ 2022-03-21 06:58 心悟&&星际 阅读(54) 评论(0) 推荐(0) 编辑
摘要:P3391 【模板】文艺平衡树splay解法1 #include <bits/stdc++.h> using namespace std; const int N = 100005; int ch[N][2], par[N], val[N], cnt[N], size[N], rev[N], roo 阅读全文
posted @ 2022-03-20 07:57 心悟&&星际 阅读(34) 评论(0) 推荐(0) 编辑
摘要:P3369 【模板】普通平衡树 #include <bits/stdc++.h> using namespace std; const int N = 200005; int ch[N][2], par[N], val[N], cnt[N], size[N], ncnt, root; bool ch 阅读全文
posted @ 2022-03-20 07:49 心悟&&星际 阅读(72) 评论(0) 推荐(0) 编辑
摘要:P3369 【模板】普通平衡树 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define lc ch[p][0] #define rc ch[p][1] using namespace std; 阅读全文
posted @ 2022-03-20 07:39 心悟&&星际 阅读(20) 评论(0) 推荐(0) 编辑
摘要:P4447[AHOI2018初中组]分组 #include<bits/stdc++.h> using namespace std; map<int,int> m; int ans=101000; void rule(int n) { while(n>0) { int tj=0; map<int,in 阅读全文
posted @ 2022-03-19 19:38 心悟&&星际 阅读(51) 评论(0) 推荐(0) 编辑
摘要:P3985 不开心的金明 #include<iostream> #include<map> using namespace std; int w[101],v[101]; map<int,map<int,int> > dp; int n,W; long long dfs(int i,int zl) 阅读全文
posted @ 2022-03-19 18:32 心悟&&星际 阅读(32) 评论(0) 推荐(0) 编辑
摘要:数据结构定义 typedef struct BiTNode { ElemType data; //数据域 ChildPtr *lchild,*rchild; //左右孩子的指针域 //可以开个指针域指向双亲,变为三叉链表 }BiTNode, *BiTree; 第一种:已知前序遍历、中序遍历求后序遍历 阅读全文
posted @ 2022-03-18 10:53 心悟&&星际 阅读(386) 评论(0) 推荐(0) 编辑
摘要:数据结构定义 typedef struct BITNode{ int data; int bf; int cnt; struct BITNode *lchild,*rchild; }BITNode,*BITree; 左旋 void L_Rotate(BITree &T) { BITree tmp; 阅读全文
posted @ 2022-03-18 10:04 心悟&&星际 阅读(30) 评论(0) 推荐(0) 编辑
摘要:数据结构定义 struct node{ int data;//结点的内容 int left;//左子树 int right;//右子树 int cnt; int size; } Bst[100100]; queue<int> sq; int root=0; int tot=0; 更新子树大小:等于左 阅读全文
posted @ 2022-03-18 09:55 心悟&&星际 阅读(28) 评论(0) 推荐(0) 编辑
摘要:#include<iostream> #include<cstdio> using namespace std; const int Maxn=10000000; int tr[2*Maxn+10]; int lowbit(int x) { return x&(-x); } void add(int 阅读全文
posted @ 2022-03-17 23:17 心悟&&星际 阅读(27) 评论(0) 推荐(0) 编辑
摘要:#include<bits/stdc++.h> #define INF INT_MAX using namespace std; const int maxn=100010; int sum=0,R=0; int sz[maxn],v[maxn],num[maxn],rd[maxn],son[max 阅读全文
posted @ 2022-03-17 23:14 心悟&&星际 阅读(21) 评论(0) 推荐(0) 编辑
摘要:#include<bits/stdc++.h> using namespace std; const int N=10000010; int T[N<<3]; void update(int p,int v,int rt,int l,int r) { T[rt]+=v; if (l==r) retu 阅读全文
posted @ 2022-03-17 23:09 心悟&&星际 阅读(34) 评论(0) 推荐(0) 编辑
摘要:替罪羊树——简单粗暴的数据结构正题如果在一棵平衡的二叉搜索树内进行查询等操作,时间就可以稳定在log(n),但是每一次的插入节点和删除节点,都可能会使得这棵树不平衡,最坏情况就是退化成一条链,显然我们不想要这种树,于是各种维护的方法出现了,大部分的平衡树都是通过旋转来维护平衡的,但替罪羊树就很厉害了 阅读全文
posted @ 2022-03-17 23:02 心悟&&星际 阅读(41) 评论(0) 推荐(0) 编辑
摘要:Splay简易教程 百度百科伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由丹尼尔·斯立特Daniel Sleator 和 罗伯特·恩卓·塔扬Robert Endre Tarjan 在1985年发明的。在伸展树上的一般操作都基于伸展 阅读全文
posted @ 2022-03-16 21:14 心悟&&星际 阅读(178) 评论(0) 推荐(0) 编辑
摘要:AVL树在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis,他们在1962 阅读全文
posted @ 2022-03-15 08:52 心悟&&星际 阅读(78) 评论(0) 推荐(0) 编辑
摘要:红黑树红黑树在AVL树“适度平衡”的基础上,进一步放宽条件:红黑树的左右子树高度差绝对值不超过两倍。红黑树也是一种平衡二叉搜索树,虽然和AVL树一样,查找、插入和删除的时间复杂度均为O(logn),但是其统计性能更好一些,任何不平衡都可以在3次旋转之内解决。因此红黑树被广泛应用,例如在C++ STL 阅读全文
posted @ 2022-03-14 11:34 心悟&&星际 阅读(156) 评论(0) 推荐(0) 编辑
摘要:一、递归的基本概念一个函数、概念或数学结构,如果在其定义或说明内部直接或间接地出现对其本身的引用,或者是为了描述问题的某一状态,必须要用至它的上一状态,而描述上一状态,又必须用到它的上一状态……这种用自己来定义自己的方法,称之为递归或递归定义。在程序设计中,函数直接或间接调用自己,就被称为递归调用。 阅读全文
posted @ 2022-03-13 20:13 心悟&&星际 阅读(308) 评论(0) 推荐(0) 编辑
摘要:FloodFill算法啥是 FloodFill 算法呢,最直接的一个应用就是「颜色填充」,就是 Windows 绘画本中那个小油漆桶的标志,可以把一块被圈起来的区域全部染色。这种算法思想还在许多其他地方有应用。比如说扫雷游戏,有时候你点一个方格,会一下子展开一片区域,这个展开过程,就是 FloodF 阅读全文
posted @ 2022-03-13 15:23 心悟&&星际 阅读(97) 评论(0) 推荐(0) 编辑
摘要:图的广度优先遍历1、广度优先搜索遍历过程图的广度优先搜索(Depth First Search),和树的层次遍历比较类似。它的思想:类似于一个分层搜索的过程,广度优先遍历需要使用一个队列以保持访问过的结点的顺序,以便按这个顺序来访问这些结点的邻接结点。示例 对图7-25连通无向图采用广度优先搜索遍历 阅读全文
posted @ 2022-03-13 15:21 心悟&&星际 阅读(360) 评论(0) 推荐(0) 编辑
摘要:P3916 图的遍历 #include<iostream> #include<cstdio> #include<vector> #include<algorithm> #include<queue> #include<cstring> #include<string> using namespace 阅读全文
posted @ 2022-03-13 15:14 心悟&&星际 阅读(16) 评论(0) 推荐(0) 编辑
摘要:P1807 最长路 #include<iostream> #include<cstdio> #include<vector> #include<algorithm> #include<queue> #include<cstring> #include<string> using namespace 阅读全文
posted @ 2022-03-13 15:11 心悟&&星际 阅读(23) 评论(0) 推荐(0) 编辑
摘要:图论中基本的深度与广度遍历,注意在遍历中如何保证先遍历编号小的结点。 #include<iostream> #include<cstdio> #include<vector> #include<algorithm> #include<queue> #include<cstring> using na 阅读全文
posted @ 2022-03-13 15:03 心悟&&星际 阅读(30) 评论(0) 推荐(0) 编辑
摘要:图的深度优先遍历1、深度优先搜索遍历过程图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被 阅读全文
posted @ 2022-03-13 09:31 心悟&&星际 阅读(490) 评论(0) 推荐(0) 编辑
摘要:图的存储结构邻接矩阵——表示顶点间相连关系的矩阵设图G有n (n≥1) 个顶点,则邻接矩阵是一个n阶方阵。 当矩阵中的 [i,j] !=0(下标从1开始) ,代表其对应的第i个顶点与第j个顶点是连接的。 特点: 无向图的邻接矩阵是对称矩阵,n个顶点的无向图需要n*(n+1)/2个空间大小有向图的邻接 阅读全文
posted @ 2022-03-13 09:24 心悟&&星际 阅读(81) 评论(0) 推荐(0) 编辑
摘要:图的基本概念图的定义图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)的集合,至于连线的长度与结点的位置是无关紧要的。注意:线性表可以是空表,树可以是空树,图不可以是空图,图可以没有边,但是至少要有一个顶点。1.有向图若E是 阅读全文
posted @ 2022-03-13 09:16 心悟&&星际 阅读(544) 评论(0) 推荐(0) 编辑
摘要:Johnson 全源最短路径算法Johnson 和 Floyd 一样,是一种能求出无负环图上任意两点间最短路径的算法。该算法在 1977 年由 Donald B. Johnson 提出。任意两点间的最短路可以通过枚举起点,跑 次 Bellman-Ford 算法解决,时间复杂度是O(n2m) 的,也可 阅读全文
posted @ 2022-03-13 08:25 心悟&&星际 阅读(315) 评论(0) 推荐(0) 编辑
摘要:Floyd - Warshall(弗洛伊德算法)简介:Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。Floyd - Warsh 阅读全文
posted @ 2022-03-13 08:16 心悟&&星际 阅读(693) 评论(0) 推荐(0) 编辑
摘要:SPFA算法是求解单源最短路径问题的一种算法,由理查德·贝尔曼(Richard Bellman) 和 莱斯特·福特创立的。有时候这种算法也被称为 Moore-Bellman-Ford 算法,因为 Edward F. Moore 也为这个算法的发展做出了贡献。它的原理是对图进行V-1次松弛操作,得到所 阅读全文
posted @ 2022-03-13 07:44 心悟&&星际 阅读(788) 评论(0) 推荐(0) 编辑
摘要:Bellman-Ford最短路径算法单源最短路径给定一个图,和一个源顶点src,找到从src到其它所有所有顶点的最短路径,图中可能含有负权值的边。Dijksra的算法是一个贪婪算法,时间复杂度是O(VLogV)(使用最小堆)。但是迪杰斯特拉算法在有负权值边的图中不适用,Bellman-Ford适合这 阅读全文
posted @ 2022-03-13 07:33 心悟&&星际 阅读(106) 评论(0) 推荐(0) 编辑
摘要:最短路径--迪杰斯特拉(Dijkdtra)算法迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。算法思想每次找到离源点最近的一个顶点,然后以该顶点为中心,然后得到源点到其他顶点 阅读全文
posted @ 2022-03-13 07:29 心悟&&星际 阅读(797) 评论(0) 推荐(0) 编辑
摘要:最短路径在最短路径问题中,我们给定一个带权重的有向图G=(V,E),和权重函数w,E→R,该权重函数将每条边映射到实数值的权重上。图中一条路径p=(v0,v1…,vk)的权重w(p)是构成该路径的所有边的权重之和。定义从结点u到结点v的最短路径权重δ(u,v)如下δ(u,v)=min(w(p),p是 阅读全文
posted @ 2022-03-13 07:17 心悟&&星际 阅读(457) 评论(0) 推荐(0) 编辑
摘要:概念树(Tree):如果一个无向连通图中不存在回路,则这种图称为树。n个结点的无向连通图是树,它有几个边吗?生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所有顶点的树,则该子图称为G的生成树。生成树是连通图的极小连通子图。这里所谓极小是指:若在树中任意增加一条边,则 阅读全文
posted @ 2022-03-13 07:07 心悟&&星际 阅读(663) 评论(0) 推荐(0) 编辑
摘要:P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G这是一道贪心算法的题目,每次选择两个最小的堆,合并后,继续直到只有一堆为止,可能用multiset进行维护。 #include<bits/stdc++.h> using namespace 阅读全文
posted @ 2022-03-12 19:34 心悟&&星际 阅读(40) 评论(0) 推荐(1) 编辑
摘要:P1886 滑动窗口 /【模板】单调队列 //60分 #include<bits/stdc++.h> using namespace std; vector <int> Maxv,Minv; struct Maxnode { int val; int i; bool operator <(const 阅读全文
posted @ 2022-03-12 08:03 心悟&&星际 阅读(19) 评论(0) 推荐(0) 编辑
摘要:P1036 [NOIP2002 普及组] 选数枚举每一种选数并进行素数的判断,计数。 //P1036 选数 #include<iostream> using namespace std; long long ans=0; int a[21]; int n,k; //判断素数 int isprime( 阅读全文
posted @ 2022-03-11 22:39 心悟&&星际 阅读(182) 评论(0) 推荐(0) 编辑
摘要:P6832 [Cnoi2020]子弦分析单个字符的子串中出现次数最多的一定是所有子串中出现次数最多的。统计每个字符出现的次数,并取最大值。 #include<iostream> #include<cstring> #include<cstdio> using namespace std; int a 阅读全文
posted @ 2022-03-11 14:50 心悟&&星际 阅读(53) 评论(0) 推荐(0) 编辑
摘要:P3742 umi的函数分析逐一对比两个字符串中对应的字符x[i]<y[i]时,z[i]无解,x[i]=y[i]能取z[i]>=x[i],x[i]>y[i]时,只能取z[i]=y[i]。 //P3742 umi的函数 #include<iostream> #include<cstring> usin 阅读全文
posted @ 2022-03-11 14:46 心悟&&星际 阅读(44) 评论(0) 推荐(0) 编辑
摘要:P2676 [USACO07DEC]Bookshelf B 分析按身高大高到低取到大于书架高度时,这时所需要的数量。 #include<iostream> #include<algorithm> using namespace std; const int Maxn=20001; int a[Max 阅读全文
posted @ 2022-03-11 14:36 心悟&&星际 阅读(138) 评论(0) 推荐(0) 编辑
摘要:C++中指针和引用的应用很常见,连着的使用极易混淆,但是区别很明显: 1. 指针是变量,而引用只是变量的一个别名,而且引用使得别名与引用对象绑在了一起。2.指针初始化之后还可以指向其他变量,但是引用只能初始化一次。3.sizeof 操作的结果不一样,引用为所指向变量的大小,指针则返回指针本身的大小。 阅读全文
posted @ 2022-03-11 11:40 心悟&&星际 阅读(64) 评论(0) 推荐(0) 编辑
摘要:一、指针作为函数的参数指针可以作为函数的参数, #include<bits/stdc++.h> using namespace std; //有错误的两个变量交换 void Swap(int *a,int *b) { int *p; p=a; a=b; b=p; } //运行错误 void Swap 阅读全文
posted @ 2022-03-11 11:23 心悟&&星际 阅读(65) 评论(0) 推荐(0) 编辑
摘要:数组名是一个指针,它指向数组第一个元素的地址,所以可以用数组名遍历数组,也可以用指针遍历数组,注意的是数组名是一个静态指针不能进行++,--,可以进行+i,-i运算,指针则可以进行上述两种运算,因为它的值是保存地址的一个变量所以可以改变。 #include<bits/stdc++.h> using 阅读全文
posted @ 2022-03-11 09:45 心悟&&星际 阅读(58) 评论(0) 推荐(0) 编辑
摘要:P2356 弹珠游戏分析对于某个位置为0的所在行和所在列求和,并求最大值,本题的关键如何快速求是这n*n(最多10000)个值,在输入时预处理每行每列敌人的数量。 #include<iostream> using namespace std; const int Maxn=1010; struct 阅读全文
posted @ 2022-03-11 09:33 心悟&&星际 阅读(131) 评论(0) 推荐(0) 编辑
摘要:P1181 数列分段Section I 分析尽可能的对每个区间求和直到超过M后,重新统计,并计数加1。 //P1181 数列分段Section I #include<iostream> using namespace std; int a[100000]; int main() { int n,m; 阅读全文
posted @ 2022-03-11 09:14 心悟&&星际 阅读(38) 评论(0) 推荐(0) 编辑
摘要:P1614爱与愁的心痛 分析:共计n-m+1个连续区间,从这n-m+1个数中取最小值。问题转为如何求这n-m+1个数,可以用前缀和进行优化。 //P1614爱与愁的心痛 #include<iostream> #include<algorithm> using namespace std; int a 阅读全文
posted @ 2022-03-11 09:06 心悟&&星际 阅读(87) 评论(0) 推荐(0) 编辑
摘要:求有向图的强连通分量个数(kosaraju算法)1. 定义 连通分量:在无向图中,即为连通子图。 上图中,总共有四个连通分量。顶点A、B、C、D构成了一个连通分量,顶点E构成了一个连通分量,顶点F,G和H,I分别构成了两个连通分量。 强连通分量:有向图中,尽可能多的若干顶点组成的子图中,这些顶点都是 阅读全文
posted @ 2022-03-11 08:54 心悟&&星际 阅读(3870) 评论(0) 推荐(0) 编辑
摘要:尺取--(毛毛虫算法)尺取算法也叫毛毛虫算法,因为计算过程有点类似毛毛虫一点点的往前挪,在挪动的过程中可以得到一些需要的解。(自动脑补)通过两个变量来保存所选取区间的左右端点,然后不断的推进区间,寻找所需要的答案(尺取的精髓),其实也是一种暴力枚举方法,不过是有技巧的枚举,所以尺取算法比一般的算法快 阅读全文
posted @ 2022-03-11 08:35 心悟&&星际 阅读(261) 评论(0) 推荐(0) 编辑
摘要:一、变量的内存地址(变量放在哪里)每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址: #include<bits/stdc++.h> using namespace std; int main() 阅读全文
posted @ 2022-03-10 22:06 心悟&&星际 阅读(62) 评论(0) 推荐(0) 编辑
摘要:同余给定一个正整数m,如果两个整数a和b满足a-b能够被m整除m|(a-b),那么整数a与b对模m同余,记为a≡b (mod m)举例a=100,b=60,a-b=40,m=8,8|40,故100≡60 (mod 40)。同余另一种说法是a%m==b%m。主要性质如果a≡b (mod m),c为整数 阅读全文
posted @ 2022-03-10 21:00 心悟&&星际 阅读(139) 评论(0) 推荐(0) 编辑
摘要:集合的组合(子集)设S是n元素集合。集合S的一个组合通常表示集合S的元素的一个无序选择。这样一个选择的结果是S的元素构成的一个子集。因此,S的一个组合就是S的子集的一个选择。因此,术语组合与子集本质上是可以互换的,通常我们使用更熟悉的子集而不使用略显笨拙的组合,除非要强调选择的过程。 我们用 表示n 阅读全文
posted @ 2022-03-10 20:56 心悟&&星际 阅读(413) 评论(0) 推荐(0) 编辑
摘要:卡特兰数列(Catalan )简述卡特兰数又称卡塔兰数,它是组合数学中一个常出现在各种计数问题中出现的数列,其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, ......公式1.递归公式12.递归公式2 3 阅读全文
posted @ 2022-03-10 20:32 心悟&&星际 阅读(749) 评论(0) 推荐(0) 编辑
摘要:本文只总结常见的序列容器(vector、deque、list)和关联容器(set、multiset、map、multimap)的迭代器失效问题。原迭代器指的是进行操作之前保存的迭代器,包括begin()、end()以及其他位置的迭代器。vector:成员函数push_back():会在容器末尾添加一 阅读全文
posted @ 2022-03-10 17:55 心悟&&星际 阅读(208) 评论(0) 推荐(0) 编辑
摘要:C++迭代器(STL迭代器)iterator详解要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。迭代器按照定义方式分 阅读全文
posted @ 2022-03-10 17:51 心悟&&星际 阅读(825) 评论(0) 推荐(0) 编辑
摘要:C++运算符优先级表C++运算符优先级表,从上到下,从左到右,优先级依次减弱。优先级 运算符 说明 结合性1 :: 范围解析 自左向右2 ++ -- 后缀自增/后缀自减 () 括号 [] 数组下标 . 成员选择(对象) −> 成员选择(指针) 3 ++ -- 前缀自增/前缀自减 自右向左 + − 加 阅读全文
posted @ 2022-03-10 15:54 心悟&&星际 阅读(1238) 评论(0) 推荐(0) 编辑
摘要:杂项运算符下表列出了 C++ 支持的其他一些重要的杂项运算符。运算符 描述sizeof sizeof运算符返回变量的大小。例如,sizeof(a)将返回4,其中a是整数。Condition?X:Y 条件运算符。如果Condition为真?则值为X:否则值为Y。, 逗号运算符会顺序执行一系列运算。整个 阅读全文
posted @ 2022-03-10 15:53 心悟&&星际 阅读(64) 评论(0) 推荐(0) 编辑
摘要:赋值运算符下表列出了 C++ 支持的赋值运算符:运算符 描述 实例= 简单的赋值运算符,把右边操作数的值赋给左边操作数 C=A+B将把A+B的值赋给C+= 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C+=A相当于C=C+A-= 减且赋值运算符,把左边操作数减去右边操作数的结果 阅读全文
posted @ 2022-03-10 15:50 心悟&&星际 阅读(218) 评论(0) 推荐(0) 编辑
摘要:逻辑运算符下表显示了 C++ 支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:运算符 描述 实例&& 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (A&&B)为假。|| 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A||B)为真。! 称为 阅读全文
posted @ 2022-03-10 15:47 心悟&&星际 阅读(256) 评论(0) 推荐(0) 编辑
摘要:关系运算符下表显示了 C++ 支持的所有关系运算符。同样还是假设变量 A 的值为 10,变量 B 的值为 20,则:运算符 描述 实例== 检查两个操作数的值是否相等,如果相等则条件为真。 (A==B)不为真。!= 检查两个操作数的值是否相等,如果不相等则条件为真。 (A!=B)为真。> 检查左操作 阅读全文
posted @ 2022-03-10 15:44 心悟&&星际 阅读(123) 评论(0) 推荐(0) 编辑
摘要:算术运算符下表显示了 C++ 支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:运算符 描述 实例+ 把两个操作数相加 A+B将得到30- 从第一个操作数中减去第二个操作数 A-B将得到-10* 把两个操作数相乘 A*B将得到200/ 分子除以分母 B/A将得到2% 取模 阅读全文
posted @ 2022-03-10 14:38 心悟&&星际 阅读(106) 评论(0) 推荐(0) 编辑
摘要:二维数组一、二维数组的定义当一维数组元素的类型也是一维数组时,便构成了“数组的数组”,即二维数组。二维数组定义的一般格式:数据类型 数组名[常量表达式1] [常量表达式2] ;例如:int a[4][10];a数组实质上是一个有4行、10列的表格,表格中可储存40个元素。第1行第1列对应a数组的a[ 阅读全文
posted @ 2022-03-10 12:21 心悟&&星际 阅读(3223) 评论(0) 推荐(0) 编辑
摘要:一维数组C++语言一、为什么要使用数组通过前面几章的学习,我们已经可以编写程序来解决各种相当复杂的问题了,但是当需要处理的数据比较多时,仅依靠前面的知识是不够的,即使简单的问题也可能需要比较复杂的程序来处理。请看下面的例子:例题:输入50个学生的某门课程的成绩,打印出低于平均分的学生序号与成绩。【分 阅读全文
posted @ 2022-03-10 11:39 心悟&&星际 阅读(846) 评论(0) 推荐(0) 编辑
摘要:一、定义字符数组:存储字符的数组字符串 :是使用最频繁的字符数组,是一个特殊的字符数组。C++中并没有专门的字符串的类型,一个字符串实际上就是一个字符数组,与普通字符数组不同的是,字符串的结尾有一个字符\0,表示字符串的结束。char 可以定义字符数组,也可以定义字符串。 字符串实际上是使用 nul 阅读全文
posted @ 2022-03-10 10:42 心悟&&星际 阅读(1030) 评论(0) 推荐(0) 编辑
摘要:string容器要想使用标准C++中string类,必须要包含#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件using namespace std;string类的构造函数string(const char *s); //用c字符 阅读全文
posted @ 2022-03-10 09:24 心悟&&星际 阅读(34) 评论(0) 推荐(0) 编辑
摘要:Queue容器Queue容器概述queue队列与栈有点类似,栈一个是在同一端存取数据,队列一个是在一端存入数据,另一端取出数据。单向队列中的数据是先进先出(First In First Out,FIFO)。在STL中,单向队列也是以别的容器作为底部结构,再将接口改变,使之符合单向队列的特性就可以了。 阅读全文
posted @ 2022-03-10 09:21 心悟&&星际 阅读(27) 评论(0) 推荐(0) 编辑
摘要:C++ Stack栈的基本概念栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是 阅读全文
posted @ 2022-03-10 09:16 心悟&&星际 阅读(237) 评论(0) 推荐(0) 编辑
摘要:list容器list是C++标准模版库(STL,Standard Template Library)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。使用list容器之前必须加上<list>头文件:#include<list>;list属于std命名域的内容,因此需要通 阅读全文
posted @ 2022-03-10 08:06 心悟&&星际 阅读(31) 评论(0) 推荐(0) 编辑
摘要:计数排序(Counting Sort)计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。1 算法描述找出待排序的数组中最大和最小的元素;统计数组中每个值为i的元素出现的次数,存入数 阅读全文
posted @ 2022-03-09 21:20 心悟&&星际 阅读(60) 评论(0) 推荐(0) 编辑
摘要:桶排序(Bucket Sort)桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排) 阅读全文
posted @ 2022-03-09 21:18 心悟&&星际 阅读(78) 评论(0) 推荐(0) 编辑
摘要:选择排序(Selection Sort)选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。2.1 阅读全文
posted @ 2022-03-09 21:15 心悟&&星际 阅读(160) 评论(0) 推荐(0) 编辑
摘要:堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图 阅读全文
posted @ 2022-03-09 15:24 心悟&&星际 阅读(16) 评论(0) 推荐(0) 编辑
摘要:P1536 村村通本题要求统计连通分块的个数,同一个连通分块可以用并查集进行处理 /* 村村通 */ #include<iostream> using namespace std; const int Max=1010; int pre[Max]; int n,m,cnt; void make() 阅读全文
posted @ 2022-03-09 14:22 心悟&&星际 阅读(26) 评论(0) 推荐(0) 编辑
摘要:Shell排序希尔排序是一种插入排序算法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。Shell排序的执行时间依赖于增量序列。 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后 阅读全文
posted @ 2022-03-09 14:10 心悟&&星际 阅读(148) 评论(0) 推荐(0) 编辑
摘要:插入排序有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n 阅读全文
posted @ 2022-03-09 11:03 心悟&&星际 阅读(185) 评论(0) 推荐(0) 编辑
摘要:冒泡排序排序的基本概念排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。 阅读全文
posted @ 2022-03-09 08:49 心悟&&星际 阅读(18) 评论(0) 推荐(0) 编辑
摘要:1. 概述AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树种查找、插入和删除在平均和最坏情况下都是O(log n),增加和删除可能需要通过一次 阅读全文
posted @ 2022-03-09 08:25 心悟&&星际 阅读(31) 评论(0) 推荐(0) 编辑
摘要:丢番图方程形如ax+by=c,其中a,b,c为整数的方程,现在要求x,y的整数解。如2x+3y=5显然这个方程有整数解(x=1,y=1)同时有无穷多个解。如2x+4y=5显然这个方程没有整数解。下面的定理告诉我们这种方程有解的条件及所有解的形式。定理1:设a,b是整数且d=(a,b)。如果c不能被d 阅读全文
posted @ 2022-03-09 07:47 心悟&&星际 阅读(765) 评论(0) 推荐(0) 编辑
摘要:C++中的unique(),unique_copy()的用法作用:去除重复的相邻的重复的元素,即如果两个元素相同但是不相邻,则不会去除unique 将重复的元素没有删除,而是放在了最后面,故原来是多少元素,去重后还是多少元素,保存了剔除的元素unique_copy 是将去重后的元素重新放到另外一个数 阅读全文
posted @ 2022-03-08 21:56 心悟&&星际 阅读(221) 评论(0) 推荐(0) 编辑
摘要:P7072 [CSP-J2020] 直播获奖 #include<cstdio> #include<algorithm> #include<vector> #include<cmath> #include<functional> using namespace std; vector <int> a; 阅读全文
posted @ 2022-03-08 21:52 心悟&&星际 阅读(131) 评论(0) 推荐(0) 编辑
摘要:P7072 [CSP-J2020] 直播获奖基本思想:求前几名是多少分。 #include<algorithm> #include<iostream> using namespace std; const int maxn=100010; int a[maxn]; int t[610]; int m 阅读全文
posted @ 2022-03-08 21:48 心悟&&星际 阅读(40) 评论(0) 推荐(0) 编辑
摘要:c++ STL中sort函数是一个快速排序函数可以对任何类型的数据进行排序。STL,C++中的标准模板库, 使用起来方便并且效率较高;#include<algorithm>//用sort要包含这个头文件 一:对基本类型数组从小到大排序sort( 数组名+n1,数组名+n2);将数组中下标从n1到n2 阅读全文
posted @ 2022-03-08 21:44 心悟&&星际 阅读(153) 评论(0) 推荐(0) 编辑
摘要:P4447 [AHOI2018初中组]分组题解在数轴上统计各个实力值出现的次数。我们要研究如何使人数最少的组别人数最大——也就是如何使长度最短的线长度最大。不妨令每一次画线都从最左边一列开始。每次都画到底,可以吗?显然,大多数情况下这不是最优解。最后可能会剩下一个方块“一枝独秀”:出现这种情况的根本 阅读全文
posted @ 2022-03-08 20:58 心悟&&星际 阅读(49) 评论(0) 推荐(0) 编辑
摘要:P4995 跳跳!贪心思想,在石头中最大和最小来回跳。 #include<bits/stdc++.h> using namespace std; int main() { vector<int> h; int n; cin>>n; for (int i=1;i<=n;i++) { int x; ci 阅读全文
posted @ 2022-03-08 15:40 心悟&&星际 阅读(23) 评论(0) 推荐(0) 编辑
摘要:P2240 【深基12.例1】部分背包问题按价值比从大到小排序,每次选择价值比大的全部物品,或按比例选取部分物品直到背包为空为止。 #include<bits/stdc++.h> using namespace std; struct node{ int zl; int jz; bool opera 阅读全文
posted @ 2022-03-08 08:55 心悟&&星际 阅读(44) 评论(0) 推荐(0) 编辑
摘要:P1478 陶陶摘苹果(升级版)由于要摘到最多的苹果,所以先选择摘一个苹果需要的力气 小的苹果。 //P1478 陶陶摘苹果(升级版) #include<iostream> #include<algorithm> #include<vector> using namespace std; struc 阅读全文
posted @ 2022-03-08 08:38 心悟&&星际 阅读(62) 评论(0) 推荐(0) 编辑
摘要:P1094 [NOIP2007 普及组] 纪念品分组如果当前的最小物品+最大物品不超过上限,这两个物品合并,如果不行最大物品只能单独为一件不能与其它的任何一个合并,这样合并最后就是最少的分组。本题用到的知识点有,排序,双指针,贪心思想。 //P1094 纪念品分组 #include<iostream 阅读全文
posted @ 2022-03-08 08:23 心悟&&星际 阅读(87) 评论(0) 推荐(0) 编辑
摘要:走楼梯问题题目:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。比如,每次走1级台阶,一共走10步,这是其中一种走法。我们可以简写成 1,1,1,1,1,1,1,1,1,1。再比如,每次走2级台阶,一共走5步,这是另一种走法。我们可以简写 阅读全文
posted @ 2022-03-07 21:12 心悟&&星际 阅读(231) 评论(0) 推荐(0) 编辑
摘要:P3368 【模板】树状数组 2由于差分数组的前缀和,为原数组的值,用树状数组去维护原数组的差分数组,区间[l,r]修改为t[l]+=delta,t[r+1]-=delta,单点s的查询变成区间[1-s]查询,变成求[1-s]的前缀和。 //P3368【模板】树状数组 2 //P3374 【模板】树 阅读全文
posted @ 2022-03-07 17:26 心悟&&星际 阅读(27) 评论(0) 推荐(0) 编辑
摘要:P1531 I Hate It区间最大值,区间查询最大值,单点更新,本解使用树状数组求解 #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; const int MAXN = 3e5; int a 阅读全文
posted @ 2022-03-07 17:01 心悟&&星际 阅读(37) 评论(0) 推荐(0) 编辑
摘要:P1531 I Hate It区间最大值,区间查询最大值,单点更新 //P1531 I Hate It #include<cstdio> #include<algorithm> #include<iostream> using namespace std; #define lson l,m,rt<< 阅读全文
posted @ 2022-03-07 16:59 心悟&&星际 阅读(23) 评论(0) 推荐(0) 编辑
摘要:P1204 [USACO1.2]挤牛奶Milking Cows从暴力思想出发,建立一个int数组b用来标记哪些时间有人挤牛奶,哪些时间空闲,然后从有挤牛奶的时间开始统计每一个段挤牛奶时间和空闲时间,并求最长挤牛奶时间和最长空闲时间,这样做时间复杂度为O(n*s),s为挤牛奶的时间长度,会TLE。如果 阅读全文
posted @ 2022-03-07 16:06 心悟&&星际 阅读(106) 评论(0) 推荐(0) 编辑
摘要:P1204 [USACO1.2]挤牛奶Milking Cows从暴力思想出发,建立一个bool数组用来标记哪些时间有挤牛奶,哪些时间空闲,然后从有挤牛奶的时间开始统计每一个段挤牛奶时间和空闲时间,并求最长挤牛奶时间和最长空闲时间,这样做时间复杂度为O(n*s),s为挤牛奶的时间长度,会TLE。如果优 阅读全文
posted @ 2022-03-07 15:47 心悟&&星际 阅读(205) 评论(0) 推荐(0) 编辑
摘要:P3374 【模板】树状数组 1题解:线段树的单点更新,区间查询,注意线段树的结点个数是原数组的4倍 #include<iostream> #include<cstdio> using namespace std; long long s[2000100],a[501000],n,m,dx,dy; 阅读全文
posted @ 2022-03-07 15:13 心悟&&星际 阅读(32) 评论(0) 推荐(0) 编辑
摘要:普通线段树问题引入给定一个序列有n(n<=100000)个元素,有如下两个基本操作查询:给定区间[l..r],求这个区间所有元素的和修改:修改某个元素的值。任务:输出每个查询的值。任务数量m(m<=100000),只有上述两种操作。朴素算法一对于查询任务可以使用循环完成,时间复杂度O(n)。对于修改 阅读全文
posted @ 2022-03-07 14:48 心悟&&星际 阅读(30) 评论(0) 推荐(0) 编辑
摘要:P3406 海底高铁题解区间修改可以用差分思想,统计每个点出现次数用前缀和,最后取最小值 #include<bits/stdc++.h> using namespace std; const int maxn=100009; int p[maxn],v[maxn]; long long ans; i 阅读全文
posted @ 2022-03-07 09:37 心悟&&星际 阅读(75) 评论(0) 推荐(0) 编辑
摘要:P5638 【CSGRound2】光骓者的荣耀题解:由题意可知枚举i=1~n-k,且i+k~n两段的和求最小值,纯暴力时间O(n2),此题会TLE,预处理前缀和,可以加快两点的和求解时间为O(n),注意数据大小要long long 类型。 #include<bits/stdc++.h> using 阅读全文
posted @ 2022-03-07 08:49 心悟&&星际 阅读(118) 评论(0) 推荐(0) 编辑
摘要:P1115 最大子段和 /* P1115 最大子段和 */ #include<cstdio> #include<iostream> using namespace std; int main() { // freopen("p1115_2.in","r",stdin); int ans; int s 阅读全文
posted @ 2022-03-07 08:44 心悟&&星际 阅读(36) 评论(0) 推荐(0) 编辑
摘要:差分数组差分数组就是原数组对应项和它前面那项的差值 。来看一个例子:原数组 a:5,8,4,3,15差分数组 b:5,3,-4,-1,12还是先来看例子:原数组:a:5,8,4,3,15它的前缀和数组:c:5,13,17,20,35它的差分数组:b:5,3,4,1,12它的差分前缀和(就是差分数组的 阅读全文
posted @ 2022-03-06 22:25 心悟&&星际 阅读(99) 评论(1) 推荐(0) 编辑
摘要:前缀和是一种重要的预处理,能大大降低查询的时间复杂度。最简单的一道题就是给定 n 个数和 m 次询问,每次询问一段区间的和。求一个 O(n + m) 的做法。用 O(n) 前缀和预处理,O(m) 询问。一、一维前缀和主要代码 for(int i = 1; i <= n; ++i) sum[i] = 阅读全文
posted @ 2022-03-06 21:40 心悟&&星际 阅读(50) 评论(0) 推荐(0) 编辑
摘要:栈的应用当读到的数时入栈,当读到运算符时,对应数据出栈,计算后再入栈,当读到@时,栈顶为本题的解,这里的栈用C++stl的stack容器,简化代码的实现。 //P1449 后缀表达式 #include<iostream> #include<stack> #include<cstring> using 阅读全文
posted @ 2022-03-06 21:21 心悟&&星际 阅读(39) 评论(0) 推荐(0) 编辑
摘要:穷举法,或称为暴力破解法,其基本思路是:对于要解决的问题,列举出它的所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的解。它也常用于对于密码的破译,即将密码进行逐个推算直到找出真正的密码为止。例如一个已知是四位并且全部由数字组成的密码,其可能共有10000种组合,因此最多尝试100 阅读全文
posted @ 2022-03-06 21:03 心悟&&星际 阅读(388) 评论(0) 推荐(0) 编辑
摘要:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或 阅读全文
posted @ 2022-03-06 20:57 心悟&&星际 阅读(514) 评论(0) 推荐(0) 编辑
摘要:KMP算法是一种字符串模式匹配算法。什么是字符串的模式匹配?给定两个串S=“s1s2s3 …sm”和T=“t1t2t3 …tn”,在主串S中寻找子串T的过程叫做模式匹配,T称为模式。暴力匹配(朴素模式匹配BF)规定i是主串S的下标,j是模式T的下标。现在假设现在主串S匹配到 i 位置,模式串T匹配到 阅读全文
posted @ 2022-03-06 20:42 心悟&&星际 阅读(29) 评论(0) 推荐(0) 编辑
摘要:一、整除1.设a、b是给定的数, b ≠ 0 ,若存在整数c,使得a=bc,则称b整除a,记作b ∣ a ,反之则称b不能整除a,记作b ∤ a。2.一些性质:a. 若 a|b,且 b|c,则 a|c。b. 若 b|a,且 b|c,则b∣(a±c)c.若 c|a,且 c|b,则对于任意整数m、n,有 阅读全文
posted @ 2022-03-06 20:26 心悟&&星际 阅读(216) 评论(0) 推荐(0) 编辑
摘要:gcd指的是greatest common divisor就是最大公约数。lcm指的是Least Common Multiple,即最小公倍数。一、最大公约数最大公约数是数论中一个重要的概念设a、b不全为零,同时整除a、b的整数称为他们的公约数,显然a、b的公约数只有有限多个,我们将其中最大的一个称 阅读全文
posted @ 2022-03-06 20:19 心悟&&星际 阅读(389) 评论(0) 推荐(0) 编辑
摘要:定义:在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(因此φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’s totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和 阅读全文
posted @ 2022-03-06 20:02 心悟&&星际 阅读(197) 评论(0) 推荐(0) 编辑
摘要:算术基本定理可表述为:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 ,这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数。这样的分解称为 N 的标准分解式。质因子分解代码 #include<iostream> using namespace st 阅读全文
posted @ 2022-03-06 18:53 心悟&&星际 阅读(259) 评论(0) 推荐(0) 编辑
摘要:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。任意大于等于5的素数都与6的倍数相邻。如果n是一个合数,那么n一定有一个不超过sqrt(n)的素因子。判断一个数是否是 阅读全文
posted @ 2022-03-06 18:36 心悟&&星际 阅读(564) 评论(0) 推荐(0) 编辑
摘要:P1621 集合 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cstdlib> #include<cmath> #define maxn 100010 using namespa 阅读全文
posted @ 2022-03-06 18:19 心悟&&星际 阅读(25) 评论(0) 推荐(0) 编辑
摘要:P3367 【模板】并查集 #include<iostream> #include<algorithm> using namespace std; const int maxm=10010; int pre[maxm]; int n,m; void make()//初始化 { for (int i= 阅读全文
posted @ 2022-03-06 18:08 心悟&&星际 阅读(28) 评论(0) 推荐(0) 编辑
摘要:P1551 亲戚这里给出一个深度优先遍历的算法。O(n)的预处理,每个回答O(1)。 #include<iostream> #include<vector> using namespace std; vector <int> g[5001]; int d[5001]; int cnt=1; void 阅读全文
posted @ 2022-03-06 16:44 心悟&&星际 阅读(11) 评论(0) 推荐(0) 编辑
摘要:P1551 亲戚是一题经典的并查集的应用,有亲戚关系的为一个集合。 #include<iostream> using namespace std; const int maxn=5010; int pre[5010]; int n,m,p; void make()//初始化 { for (int i 阅读全文
posted @ 2022-03-06 16:36 心悟&&星际 阅读(28) 评论(0) 推荐(0) 编辑
摘要:并查集(Disjoint-Set)是一种可以动态维护若干个不重叠的集合,并支持合并与查询的数据结构。详细地说,并查集包括如下两个基本操作:1.Get,查询一个元素属于哪一个集合。2.Merge,把两个集合合并成一个大集合。为了具体实现并查集这种数据结构,我们首先需要定义集合的表示方法。在并查集中,我 阅读全文
posted @ 2022-03-06 16:29 心悟&&星际 阅读(115) 评论(0) 推荐(0) 编辑
摘要:排列的概念排列,一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(permutation)。特别地,当m=n时,这个排列被称作全排列(all permutation)。排列数p(n,r)=n!/(n-r)!,p(n,n)=n!,0!=1从 阅读全文
posted @ 2022-03-06 08:08 心悟&&星际 阅读(124) 评论(0) 推荐(0) 编辑
摘要:加法原理设事件A有m种产生方式,事件B有n种产生方式,当事件A与事件B产生方式不重叠时,事件A或事件B的产生方式有m+n种。用集合方法描述这个问题可以这样说: 乘法原理 设事件A有m种产生方式,事件B有n种产生方式,当事件A与事件B产生方式彼此独立,事件A与事件B的产生方式有mn种。用集合方法描述这 阅读全文
posted @ 2022-03-06 07:54 心悟&&星际 阅读(214) 评论(0) 推荐(0) 编辑
摘要:Hash (散列函数)哈希函数指将哈希表中元素的关键键值映射为元素存储位置的函数。一般的线性表,树中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较“的基础上,查找的效率依赖于查找过程中所进行的比较 阅读全文
posted @ 2022-03-04 22:22 心悟&&星际 阅读(210) 评论(0) 推荐(0) 编辑
摘要:P4305 [JLOI2011]不重复数字题解:可以使用Hash的思想,主要有两方面,一、hash函数,二、冲突处理,这里hash函数除余法,冲突一种是线性探测,另一种是开地址法 /* 简单的hash思想 */ #include<bits/stdc++.h> using namespace std; 阅读全文
posted @ 2022-03-04 20:40 心悟&&星际 阅读(54) 评论(0) 推荐(0) 编辑
摘要:P4305 [JLOI2011]不重复数字题解判重,判断之前是否出现过该数,60%的数据在[0,104]所以这个数据可以使用桶的思想进行判重,100%数据在32位整数,且个数在5*104,且有50组,可以尝试set判重。 #include<bits/stdc++.h> using namespace 阅读全文
posted @ 2022-03-04 20:14 心悟&&星际 阅读(30) 评论(0) 推荐(0) 编辑
摘要:P1059 [NOIP2006 普及组] 明明的随机数 题解排序+去重,由于值域范围在[1,1000],且个数100个内,故可以使用桶排序的思想一次完成上述两个任务。 #include<bits/stdc++.h> using namespace std; int T[1001]; int main 阅读全文
posted @ 2022-03-04 20:00 心悟&&星际 阅读(146) 评论(0) 推荐(0) 编辑
摘要:树上倍增求LCA先跑一遍dfs,知道每个结点的父结点是谁,记录在root[x][0],“x”是当前结点,“root[x][0]”是x结点向上一步得到的点(也称为父结点)。我们可以维护出来每个结点向上2k步会走到哪个结点。如果已经超出树的范围令root[x][k]=0预处理一下LOG()inline 阅读全文
posted @ 2022-03-04 14:49 心悟&&星际 阅读(24) 评论(0) 推荐(0) 编辑
摘要:在离散数学中,等价关系是指定义在集合A上的关系,满足自反的、对称的和传递的等性质。设R是定义在集合A上的等价关系,与A中一个元素a有关系的所有元素的集合叫做a的等价类。等价类应用十分广泛,如在编程语言中,我们使用等价类来判定标识符是不是表示同一个事物。在离散数学中,等价关系是指定义在集合A上的关系, 阅读全文
posted @ 2022-03-04 14:44 心悟&&星际 阅读(935) 评论(0) 推荐(0) 编辑
摘要:P1102 A-B 数对 #include<map> #include<iostream> #include<vector> using namespace std; map<int,int> m; vector <int> ma; long long ans=0; int main() { int 阅读全文
posted @ 2022-03-04 08:51 心悟&&星际 阅读(170) 评论(0) 推荐(0) 编辑
摘要:P2249 【深基13.例1】查找#include<cstdio>using namespace std;int a[1000009];int lb(int a[],int l,int r,int key){ int ans=-1; int mid; while(l<=r) { mid=((r-l) 阅读全文
posted @ 2022-03-04 08:48 心悟&&星际 阅读(45) 评论(0) 推荐(0) 编辑
摘要:C++STL提供几个二分查找的方法。 lower_bound() (1)原型template< class ForwardIt, class T >ForwardIt lower_bound( ForwardIt first, ForwardIt last, const T& value );返回第 阅读全文
posted @ 2022-03-04 07:16 心悟&&星际 阅读(166) 评论(0) 推荐(0) 编辑
摘要:二分查找算法问题一、在一个有序的序列(不降序列)中查找指定值的算法,查找成功返回它所在的位置,否则返回-1int binarySearch(int a[],int l,int r,int x){ int ans=-1; while(l<=r) { int m=l+(r-l)/2; if (a[m]= 阅读全文
posted @ 2022-03-04 07:08 心悟&&星际 阅读(31) 评论(0) 推荐(0) 编辑
摘要:堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个结点的值总是不大于或不小于其父结点的值;堆总是一棵完全二叉树。将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。堆是非线性数据 阅读全文
posted @ 2022-03-03 22:18 心悟&&星际 阅读(845) 评论(0) 推荐(0) 编辑
摘要:学习前提:数据结构与算法中的堆 对make_heap(), pop_heap(), push_heap()的用法做个总结: make_heap()生成堆,他有两个参数,也可以有三个参数,前两个参数是指向开始元素的迭代器和指向结束元素的下一个元素的迭代器。第三个参数是可选的,可以用伪函数less()和 阅读全文
posted @ 2022-03-03 21:57 心悟&&星际 阅读(58) 评论(0) 推荐(0) 编辑
摘要:P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G这是一道贪心算法的题目,每次选择两个最小的堆,合并后,继续直到只有一堆为止,可能用优先队列进行维护。 #include<bits/stdc++.h>using namespace std;i 阅读全文
posted @ 2022-03-03 16:28 心悟&&星际 阅读(77) 评论(0) 推荐(0) 编辑
摘要:P1177 【模板】快速排序 #include<bits/stdc++.h>using namespace std;int main(){ priority_queue<int,vector<int>,greater<int> > q; int n; cin>>n; for (int i=1;i<= 阅读全文
posted @ 2022-03-03 14:23 心悟&&星际 阅读(24) 评论(0) 推荐(0) 编辑
摘要:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。算法思路贪心算法一般按如下步骤进行: ①建立数学模型来描述问题。②把求解的问题分成若干 阅读全文
posted @ 2022-03-03 12:28 心悟&&星际 阅读(172) 评论(0) 推荐(0) 编辑
摘要:普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。首先要包含头文件#include<queue>, 他和queue不同的就 阅读全文
posted @ 2022-03-03 12:22 心悟&&星际 阅读(76) 评论(0) 推荐(0) 编辑
摘要:【题目描述】如果二叉树的左右子树的结构是对称的,即两棵子树皆为空,或者皆不空,则称该二叉树是对称的。编程判断给定的二叉树是否对称.例:如下图中的二叉树T1是对称的,T2是不对称的。 二叉树用顺序结构给出,若读到#则为空,二叉树T1=ABCDE,T2=ABCD#E,如果二叉树是对称的,输出“Yes”, 阅读全文
posted @ 2022-03-03 09:34 心悟&&星际 阅读(199) 评论(0) 推荐(0) 编辑
摘要:已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为x的结点,并指出是第几个结点。例:如图二叉树的数据文件的数据格式如下: 输入 第一行n为二叉树的结点个树,n<=100;第二行x表示要查找的结点的值;以下第一列数据是各结点的值,第二列数据是左儿子结点编号,第三列数据是右儿子结点编号。输出 一个数即 阅读全文
posted @ 2022-03-03 08:09 心悟&&星际 阅读(152) 评论(0) 推荐(0) 编辑
摘要:二叉树输出(btout)【问题描述】树的凹入表示法主要用于树的屏幕或打印输出,其表示的基本思想是兄弟间等长,一个结点要不小于其子结点的长度。二叉树也可以这样表示,假设叶结点的长度为1,一个非叶结点的长并等于它的左右子树的长度之和。一棵二叉树的一个结点用一个字母表示(无重复),输出时从根结点开始:每行 阅读全文
posted @ 2022-03-03 00:45 心悟&&星际 阅读(351) 评论(0) 推荐(0) 编辑
摘要:1. STL有6种序列容器类型(1)vector它提供对元素的随即访问,在尾部添加和删除元素的时间是固定的,在头部或中部插入和删除元素的复杂度为线性时间。(2)deque在<deque>文件中声明。是双端队列,支持随即访问。从deque的开始与末尾位置插入和删除元素的时间是固定的。尽管vector和 阅读全文
posted @ 2022-03-02 14:56 心悟&&星际 阅读(750) 评论(0) 推荐(0) 编辑
摘要:运算符与 &或 |非 ~异或^左移(<<)在二进制表示下把数字同时向左移,低位以0填充,高位越界后舍弃。1<<n=2n,n<<1=2n算术右移在二进制表示下把数字同时向右移,高位以符号位填充,低位越界后舍弃。算术右移等于除以2向下取整。逻辑右移在二进制表示下把数字同时向右移,高位以0位填充,低位越界 阅读全文
posted @ 2022-03-02 14:25 心悟&&星际 阅读(45) 评论(0) 推荐(0) 编辑
摘要:P1177 【模板】快速排序由于map可以按关键值排序,且每个关键值可以有对应值表示该关键值的个数,所以可以完成这道题 #include<bits/stdc++.h>using namespace std;int main(){ map<int,int> s; int n; cin>>n; for 阅读全文
posted @ 2022-03-02 08:58 心悟&&星际 阅读(32) 评论(0) 推荐(0) 编辑
摘要:P1177 【模板】快速排序 由于multiset能自动对关键值进行排序,所以multiset可以进行排序功能且支持相同关键值 #include<bits/stdc++.h>using namespace std;int main(){ multiset<int> s; int n; cin>>n; 阅读全文
posted @ 2022-03-02 08:45 心悟&&星际 阅读(38) 评论(0) 推荐(0) 编辑
摘要:FBI树(fbi)【问题描述】我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。FBI树是一种二叉树[ 二叉树:二叉树是结点的有限集合,这个集合或为空集,或由一个根结点和两棵不相交的二叉树组成。这两棵不相交的二叉树分别称为这个 阅读全文
posted @ 2022-03-02 05:10 心悟&&星际 阅读(197) 评论(0) 推荐(0) 编辑
摘要:二叉树遍历(flist)【问题描述】树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。【输入格式】输入文件flist.in共两行,每行是由字母 阅读全文
posted @ 2022-03-01 22:22 心悟&&星际 阅读(241) 评论(0) 推荐(0) 编辑
摘要:小球(DROP)【问题描述】 许多的小球一个一个的从一棵满二叉树上掉下来组成FBT(Full Binary Tree,满二叉树),每一时间,一个正在下降的球第一个访问的是非叶子节点。然后继续下降时,或者走右子树,或者走左子树,直到访问到叶子节点。决定球运动方向的是每个节点的布尔值。最初,所有的节点都 阅读全文
posted @ 2022-03-01 22:14 心悟&&星际 阅读(88) 评论(0) 推荐(0) 编辑
摘要:二叉树(binary tree,简写成BT)是一种特殊的树型结构,它的度数为2的树。即二叉树的每个结点最多有两个子结点。每个结点的子结点分别称为左孩子、右孩子,它的两棵子树分别称为左子树、右子树。二叉树有5中基本形态: 前面引入的树的术语也基本适用于二叉树,但二叉树与树也有很多不同,如:首先二叉树的 阅读全文
posted @ 2022-03-01 17:06 心悟&&星际 阅读(559) 评论(0) 推荐(0) 编辑
摘要:树是一种非线性的数据结构,用它能很好地描述有分支和层次特性的数据集合。树型结构在现实世界中广泛存在,如社会组织机构的组织关系图就可以用树型结构来表示。树在计算机领域中也有广泛应用,如在编译系统中,用树表示源程序的语法结构。在数据库系统中,树型结构是数据库层次模型的基础,也是各种索引和目录的主要组织形 阅读全文
posted @ 2022-03-01 16:42 心悟&&星际 阅读(96) 评论(0) 推荐(0) 编辑
摘要:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为 阅读全文
posted @ 2022-03-01 16:27 心悟&&星际 阅读(150) 评论(0) 推荐(0) 编辑
摘要:栈:栈是限定仅在一端进行插入或删除操作的线性表,该端称为栈顶,另一端称为栈底。不含元素的表称为空栈。栈的修改是按照后进先出的原则进行的,因此,栈又称为后进先出(last in first out)的线性表,简称LIFO结构入栈:插入元素的操作为入栈出栈:删除栈顶元素的操作为出栈栈的表示:和线性表类似 阅读全文
posted @ 2022-03-01 16:20 心悟&&星际 阅读(200) 评论(0) 推荐(0) 编辑
摘要:#include<vector> #include<iostream> #include<algorithm> using namespace std; vector <int> a; vector <int>::iterator ita; int main() { int q,n,x; cin>> 阅读全文
posted @ 2022-03-01 09:03 心悟&&星际 阅读(23) 评论(0) 推荐(0) 编辑
摘要:#include<bits/stdc++.h> using namespace std; const int Maxn=500010; long long a[Maxn]; int n; int lowbit(int x) { return x&(-x); } long long query(int 阅读全文
posted @ 2022-03-01 08:32 心悟&&星际 阅读(20) 评论(0) 推荐(0) 编辑
摘要:#include<iostream> using namespace std; const int Maxn=500010; int N,M; int a[Maxn]; int lowbit(int x) { return x&(-x); } void update(int x,int v) { w 阅读全文
posted @ 2022-03-01 08:31 心悟&&星际 阅读(15) 评论(0) 推荐(0) 编辑
摘要:前言树状数组,又称二叉索引树,是一种代码简单,应用广泛的神奇数据结构!普通树状数组概念普及:树状数组的原理 设黑色框内数组为A[1]→A[8]那么可以得到以下式子:C[1] = A[1];C[2] = A[1] + A[2];;C[3] = A[3];C[4] = A[1] + A[2] + A[3 阅读全文
posted @ 2022-03-01 07:19 心悟&&星际 阅读(39) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示