算法基础
文章平均质量分 52
算法基础
H4ppyD0g
中科院某研究所在读学生,主要方向为系统/虚拟安全,博客记录平时学习过程中的笔记,不免参考各种文章资料(如有侵权请联系删除),也会存在一些知识误区,欢迎师傅们指正。另外设置了几个付费专栏和资源,都是花费好长时间找到整理的,收费仅作为整理资料的劳动收获(买奶茶钱),如果原作者认为侵权也请联系删除。
展开
-
拜占庭算法
拜占庭算法是一种用于解决分布式系统中由于各个节点的不可靠性和网络的不稳定性从而导致节点间可能存在的信任问题的算法,它可以保证在一定条件下,即使有部分节点出现故障(不发送消息)或者作恶(只发送相反的消息)的情况下,仍然可以让各个节点之间达成一致的共识。原创 2023-10-11 20:27:10 · 367 阅读 · 0 评论 -
C++ 快读快写
快读:inline int read(){ int s=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(...原创 2019-01-27 12:15:04 · 10085 阅读 · 4 评论 -
二分查找模板 low_bound、upper_bound
1.当key存在时返回它出现的第一个位置,当key不存在时,返回第一个大于key的元素的位置。//下标从0开始,左闭右闭区间查找int search_first(int *a, int n, int key){ int l=0, r=n-1, mid, ans=0;//ans=0有必要,防止所有数都比key大 while (l&amp;lt;=r){ mid=(l+r)/2; if (...原创 2019-02-07 20:14:22 · 448 阅读 · 0 评论 -
蓝桥 去注释 (字符处理)
题目描述给你一段C++代码,将其中的注释去除后输出剩余的代码。注释共有两种形式:行注视:以//开头,一直作用到行尾为止。例子:int n;//n表示数据规模int a;去注释后:int n;int a;注意:保留行尾换行符段注视:以/开头,到//结尾,中间部分都是注释,可以跨行。例子:int main() {/*我是一段注释*/}去注释后:i...原创 2020-03-15 10:18:49 · 155 阅读 · 0 评论 -
邻接表存图 SPFA
代码来自学长讲课视频,不得不说看大神的代码就是舒服普通数组邻接表存图//MAXN代表点的最大数量,MAXM代表边的最大数量 const int MAXN=10000, MAXM=10000;int head[MAXN]; //存储第x号点链表的头部位置 int ver[MAXM]; //存储边的终点信息int edge[MAXM]; //存储边的边权信息int nextVer[MA...转载 2020-02-04 20:36:22 · 201 阅读 · 0 评论 -
蓝桥 晚会节目单 (线段树)
【问题描述】小明要组织一台晚会,总共准备了 n 个节目。然后晚会的时间有限,他只能最终选择其中的 m 个节目。这 n 个节目是按照小明设想的顺序给定的,顺序不能改变。小明发现,观众对于晚会的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第一个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推。小明给每个节目定义了一个好看值,请你帮助小明选择出 m 个节目,满足他的要求。【输入格式】输入的第一行包含两个整数 n, m ,表示节目的数量和要选择的数量。第二行包含 n 个整数,原创 2020-06-26 15:04:46 · 253 阅读 · 0 评论 -
蓝桥 第八大奇迹 (线段树)
【问题描述】在一条 R 河流域,繁衍着一个古老的名族 Z。他们世代沿河而居,也在河边发展出了璀璨的文明。Z 族在 R 河沿岸修建了很多建筑,最近,他们热衷攀比起来。他们总是在比谁的建筑建得最奇特。幸好 Z 族人对奇特的理解都差不多,他们很快给每栋建筑都打了分,这样评选谁最奇特就轻而易举了。于是,根据分值,大家很快评出了最奇特的建筑,称为大奇迹。后来他们又陆续评选了第二奇特、第二奇特、……、第七奇特的建筑,依次称为第二大奇迹、第三大奇迹、……、第七大奇迹。最近,他们开始评选第八奇特的建筑,原创 2020-11-12 12:35:01 · 515 阅读 · 2 评论 -
蓝桥 网络寻路 (问题转化)
题目描述X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径。源地址和目标地址可以相同,但中间节点必须不同。如下图所示的网络。1 -> 2 -> 3 -> 1 是允许的1 -> 2 -&g...原创 2020-04-12 15:00:16 · 183 阅读 · 0 评论 -
algorithm常用函数
stable_sort()稳定排序算法,相同值不改变位置#include <iostream>#include <algorithm>using namespace std;int a[5]={3,5,4,2,6};int main(){ stable_sort(a, a+5);//前闭后开区间 for (int i=0; i<5; i++) ...原创 2019-06-01 19:05:56 · 1180 阅读 · 0 评论 -
蓝桥 密码脱落 (菜到哭)
题目描述X星球的考古学家发现了一批古代留下来的密码。这些密码是由A、B、C、D 四种植物的种子串成的序列。仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。你的任务是:给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子输入输入一行,表示现在看到的密码串(长度不...原创 2020-04-07 16:38:27 · 279 阅读 · 1 评论 -
蓝桥 凑平方数 (我依旧很菜)
把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。比如:0, 36, 5948721再比如:10985247361, 25, 63907840, 4, 289, 15376等等…注意,0可以作为独立的数字,但不能作为多位数字的开始。分组时,必须用完所有的数字,不能重复,不能遗漏。如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?其实一开始i想...原创 2020-04-06 16:45:38 · 174 阅读 · 0 评论 -
蓝桥 大臣的旅费 (数的直径)
题目描述很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。J是T国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了J最常...原创 2020-03-29 17:15:21 · 146 阅读 · 0 评论 -
蓝桥 发现环 (拓扑排序判环)
小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。为了恢复正常传输。小明需要找到所有在环路上的电脑,你能帮助他吗?输入第一行包含一个整数N。以下N行每行两个整数a和b,表示a和b之间有一条数据链接相连。对于30%的数据,1原创 2020-11-12 16:26:57 · 274 阅读 · 0 评论 -
蓝桥 最大子矩阵 (dp)
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;ll a[505][505];int n, m;int main(){ scanf("%d%d", &n, &m); for (int i=1; i原创 2020-10-05 21:20:05 · 144 阅读 · 0 评论 -
蓝桥 摆动序列 (dp)
问题描述如果一个序列的奇数项都比前一项大,偶数项都比前一项小,则称为一个摆动序列。即 a[2i]<a[2i-1], a[2i+1]>a[2i]。小明想知道,长度为 m,每个数都是 1 到 n 之间的正整数的摆动序列一共有多少个。输入格式输入一行包含两个整数 m,n。输出格式输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。样例输入3 4样例输出1...原创 2020-05-03 20:25:21 · 526 阅读 · 0 评论 -
蓝桥 和为T (状压)
题目描述从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T。每个元素限选一次,不能一个都不选。数据规模和约定1< =n< =22T< =maxlongint集合中任意元素的和都不超过long的范围输入第一行一个正整数n,表示整数集内元素的个数。第二行n个整数,用空格隔开。第三行一个整数T,表示要达到的和。输出输出有若干行,每行输出一组解,即所选...原创 2020-03-01 15:43:34 · 223 阅读 · 0 评论 -
蓝桥 糖果 (状压dp)
题目描述糖果店的老板一共有 M 种口味的糖果出售。为了方便描述,我们将 M 种 口味编号 1 ∼ M。小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而 是 K 颗一包整包出售。幸好糖果包装上注明了其中 K 颗糖果的口味,所以小明可以在买之前就知 道每包内的糖果口味。给定 N 包糖果,请你计算小明最少买几包,就可以品尝到所有口味的糖 果。输入第一行包含三个整数 N、M 和...原创 2020-05-07 22:16:57 · 283 阅读 · 0 评论 -
蓝桥 牌型种数 (问题转化+dfs)
题目描述小明被劫持到X赌城,被迫与其他3人玩牌。 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。 这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?请填写该整数,不要填写任何多余的内容或说明文字问题转化:对于一个人拿到的牌,可以看成从1到13这13种牌中,每一种拿到多少个。对于编...原创 2020-05-06 20:29:16 · 297 阅读 · 0 评论 -
C++ stl汇总
vectorhttps://blog.csdn.net/weixin_42172261/article/details/86604772maphttps://blog.csdn.net/weixin_42172261/article/details/86621807sethttps://blog.csdn.net/weixin_42172261/article/details/866...原创 2020-01-17 19:35:29 · 250 阅读 · 0 评论 -
蓝桥 全球变暖 (bfs)
题目描述你有一张某海域NxN像素的照片,".“表示海洋、”#"表示陆地,如下所示:….##….##……##.…####.…###.…其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。...原创 2020-04-07 17:44:24 · 277 阅读 · 0 评论 -
蓝桥 k倍区间 (前缀和)
题目描述给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。你能求出数列中总共有多少个K倍区间吗?输入第一行包含两个整数N和K。(1 <= N, K <= 100000)以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)...原创 2020-03-29 14:25:27 · 165 阅读 · 0 评论 -
蓝桥 倍数问题 (我为什么会这么菜)
题目描述众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 n 个数,希望你从这 n 个数中找到三个数,使得这三个数的和是 K 的倍数,且这个和最大。数据保证一定有解。输入从标准输入读入数据。第一行包括 2 个正整数 n, K。第二行 n 个正整数,代表给定的 n 个数。输出输出到标准输出。输...原创 2020-04-06 14:05:54 · 294 阅读 · 0 评论 -
蓝桥 程序员节发橙子 (思维)
题目描述每年的 1024 程序员节日,黑马程序员都会举办大型的庆祝活动。今年的程序员节也不例外,每个班级的同学都发了橙子。班级里有 n 名同学从前到后排成一排,且已经得知了这些同学的成绩,其中第 i 名同学的成绩是 ai。班主任想根据同学们上个阶段的考试成绩来评定发橙子的数量。为了激励成绩优秀同学,发橙子时需要满足如下要求:相邻同学中成绩好的同学的橙子必须更多。若相邻的同学成绩一样,则它们分...原创 2020-05-03 21:25:28 · 380 阅读 · 0 评论 -
重定向输入输出freopen,文件流fstream
函数名:freopen声明:FILE *freopen( const char *path, const char *mode, FILE *stream );参数说明:path: 文件名,用于存储输入输出的自定义文件名。mode: 文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。stream: 一个文件,通常使用标准流文件。返回值:成功,则返回一个path所指定文...原创 2019-04-19 18:04:18 · 597 阅读 · 0 评论 -
string.find、char[]、cin.getline
若查找成功,返回按查找规则找到的第一个字符或子串的位置;若查找失败,返回npos,即-1(打印出来为4294967295)。#include <iostream>#include <string>#include <algorithm>using namespace std;string str;int main(){ str="hello w...原创 2019-06-01 19:26:58 · 466 阅读 · 0 评论 -
蓝桥 字串统计 (字符串处理)
题目描述给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。数据规模和约定n< =60S中所有字符都是小写英文字母。提示枚举所有可能的子串,统计出现次数,找出符合条件的那个输入第一行一个数字L。第二行是字符串S。L大于0,且不超过S的长度。输出一行,题目...原创 2020-05-06 21:28:21 · 297 阅读 · 0 评论 -
蓝桥 包子凑数 (筛数)
题目描述小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。当然有时包子大叔无论如何也凑不出顾客想买的数量。比如一共有3种蒸笼,分别能放4、5和6个包子。而顾客想买7个包子时,原创 2020-09-11 21:55:12 · 168 阅读 · 0 评论 -
蓝桥 金陵十三钗 (状压+记忆化搜索)
题目描述在电影《金陵十三钗》中有十二个秦淮河的女人要自我牺牲代替十二个女学生去赴日本人的死亡宴会。为了不让日本人发现,自然需要一番乔装打扮。但由于天生材质的原因,每个人和每个人之间的相似度是不同的。由于我们这是编程题,因此情况就变成了金陵n钗。给出n个女人和n个学生的相似度矩阵,求她们之间的匹配所能获得的最大相似度。所谓相似度矩阵是一个n*n的二维数组like[i][j]。其中i,j分别为女人...原创 2020-04-12 13:21:03 · 298 阅读 · 0 评论 -
POJ 3494 Largest Submatrix of All 1’s(单调栈)
Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we mean that the submatrix has the most elements.InputThe input contains multiple test cases. Each tes...原创 2019-04-07 22:22:27 · 109 阅读 · 0 评论 -
CodeForces 799C Fountains(树状数组)
树状数组把满二叉树的形状稍微改变一下,变成下面的图形。用C[i]代表子树的叶子结点的权值之和。以求和举例1=(001) C[1]=A[1];2=(010) C[2]=A[1]+A[2];3=(011) C[3]=A[3];4=(100) C[4]=A[1]+A[2]+A[3]+A[4];5=(101) C[5]=A[5];6=(1...原创 2019-03-02 16:07:00 · 287 阅读 · 0 评论 -
HDU 1506 Largest Rectangle in a Histogram(单调栈)
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different heights. For example, the figure on the left shows ...原创 2019-04-07 10:40:38 · 133 阅读 · 0 评论 -
线段树模板专题从入门到放弃
先附上学习线段树时做的笔记https://blog.csdn.net/weixin_42172261/article/details/88367758HDU 1166 敌兵布阵线段树单点增减注意update函数中当更新了单点信息后还要pushup#include <iostream>#include <cstdio>#include <cstring&...原创 2020-02-14 15:04:59 · 139 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort(树状数组+离散化+求逆序数)
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted i...转载 2019-08-04 20:09:25 · 146 阅读 · 0 评论 -
HDOJ 1873 看病要排队(优先队列)
看病要排队这个是地球人都知道的常识。不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高,级别为1的优先权最低。医生在看病时,则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话,则...原创 2019-02-26 08:18:37 · 207 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers(线段树+区间更新)
终于有点明白pushdown函数是干嘛的了,它更新的方向和pushup相反。pushup是在回溯的过程中更新此节点的父节点pushdown是在父结点有更新的时候,先向下更新直接子结点,然后再有其他的操作。pushdown函数的判断:如果不为0说明这个节点的字节点需要更新,更新完成后,把它标记为已经更新,不需要更新转载 2019-08-05 09:38:49 · 113 阅读 · 0 评论 -
HDU 1509 Windows Message Queue(优先队列)
Message queue is the basic fundamental of windows system. For each process, the system maintains a message queue. If something happens to this process, such as mouse click, text change, the system wil...原创 2019-04-06 20:24:28 · 154 阅读 · 0 评论 -
构建二叉搜索树及基本操作
二叉搜索树具有下列性质: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。在二叉搜索树的基础上,如果进行一次中序遍历,则会正好会把节点的权值从小到大搜一遍。#include <iostream>#include <cstdio>#include <...原创 2019-07-09 19:34:04 · 2916 阅读 · 1 评论 -
线段树(线段树入门笔记)
什么是线段树线段树是一种二叉搜索树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。定义结点一般定义成结构体类型,其成员可以根据需要增加struct node{ i...原创 2019-03-09 16:23:56 · 173 阅读 · 0 评论 -
POJ 3250 Bad Hair Day、POJ 2796 Feel Good(单调栈)
单调栈是栈内元素保持一定单调性(单调递增或单调递减)的栈。这里的单调递增或递减是指的从栈顶到栈底单调递增或递减, 需要注意的是它具有严格性(严格单调增或减)。单调递增栈的实现:如果栈为空或入栈元素值小于栈顶元素值,则入栈;否则,如果入栈则会破坏栈的单调性,则需要把比入栈元素小的元素全部出栈。单调递增栈模板stack&lt;int&gt; s;while (!s.empty() &amp;&...原创 2019-02-14 18:06:11 · 174 阅读 · 0 评论 -
哈弗曼编码、哈弗曼树
哈弗曼编码是依赖于字符使用频率来建立的一种编码,通过把使用频率低的字符分配相对较多的01编码,而使用频率高的分配相对较低的01编码,来建立最小的带权路径长度的树,来最大化的获得编码存储空间的一种编码规则。这个树称为哈弗曼树,也称为最优二叉树。这样可以确定每一个字符的编码不可能成为其他字符编码的坐子串,也就是当读到某一个根节点时,就可以确定这个字符已经读完了;下一个字符的编码要重新读入。原因是经过...原创 2019-07-09 12:53:12 · 257 阅读 · 0 评论