基础算法
练习算法的
aisliveF
所行皆所愿
展开
-
Dijkstra求最短路
本题目其实是对于dijkstra的堆优化版本,因为我们在朴素的版本中比遍历了所有的边,但其实多了很多与t不相关的点,那么我们优先队列存储t,访问其有关的边即可,时间复杂度为mlogn,适用于稀疏图,稠密图还是尽量用朴素版本的。接下来 m行每行包含三个整数 x,y,z,表示存在一条从点 x到点 y的有向边,边长为 z。请你求出 1号点到 n号点的最短距离,如果无法从 1号点走到 n号点,则输出 −1。请你求出 1号点到 n号点的最短距离,如果无法从 1号点走到 n号点,则输出 −1。原创 2024-09-13 10:40:52 · 575 阅读 · 0 评论 -
143. 最大异或对
在给定的 N个整数 A1,A2……AN中选出两个进行 xor(异或)运算,得到的结果最大是多少。第二行输入 N个整数 A1~AN。第一行输入一个整数 N。输出一个整数表示答案。原创 2024-09-15 10:29:44 · 227 阅读 · 0 评论 -
847. 图中点的层次
请你求出 1号点到 n号点的最短距离,如果从 1号点无法走到 n号点,输出 −1。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环。接下来 m行,每行包含两个整数 a和 b,表示存在一条从 a。输出一个整数,表示 1号点到 n号点的最短距离。所有边的长度都是 1,点的编号为 1∼n。第一行包含两个整数 n和 m。走到 b的长度为 1的边。原创 2024-09-15 17:35:58 · 146 阅读 · 0 评论 -
846. 树的重心
846. 树的重心给定一颗树,树中包含 n个结点(编号 1∼n)和 n−1条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。输入格式第一行包含整数 n,表示树的结点数。接下来 n−1行,每行包含两个整数 a和 b,表示点 a和点 b之间存在一条边。输出格式输出一个整数 m,表示将重心删除后,剩余各个连通块中点数的最大值。数据范围1≤n≤105输原创 2024-09-15 11:22:31 · 341 阅读 · 0 评论 -
归并排序.
核心思想:①找分界点,对于整个区间进行划分。②递归处理分界点划分的两部分。③将排好序的数组根据区间,用双指针进行归并。④当其中的某一个区间被指针所指向的内容为空时,将剩余的数据进行归并。请你使用归并排序对这个数列按照从小到大进行排序。个整数(所有整数均在 1∼109。输入共两行,第一行包含整数 n。并将排好序的数列按顺序输出。个整数,表示排好序的数列。范围内),表示整个数列。给定你一个长度为 n。输出共一行,包含 n。原创 2024-06-24 09:15:24 · 161 阅读 · 0 评论 -
并查集应用之合并集合
一共有 n个数,编号是 1∼n,最开始每个数各自在一个集合中。原创 2024-06-28 15:22:51 · 216 阅读 · 0 评论 -
快速排序.
请你使用快速排序对这个数列按照从小到大进行排序。个整数(所有整数均在 1∼109。输入共两行,第一行包含整数 n。并将排好序的数列按顺序输出。个整数,表示排好序的数列。范围内),表示整个数列。给定你一个长度为 n。输出共一行,包含 n。原创 2024-06-23 19:10:58 · 227 阅读 · 0 评论 -
求前缀和.
核心公式:s[i]=s[i-1]+a[i]。原创 2024-06-25 11:13:57 · 105 阅读 · 0 评论 -
区间和..
假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。行,每行输出一个询问中所求的区间内数字和。次询问,每个询问包含两个整数 l。次操作,每次操作将某一位置 x。,你需要求出在区间 [l,r]行,每行包含两个整数 x。行,每行包含两个整数 l。现在,我们首先进行 n。第一行包含两个整数 n。原创 2024-06-27 14:15:01 · 214 阅读 · 0 评论 -
二分查找(整数)
本题主要核心是:如上图所示代码段的核心①和核心②,这两者的变化都是根据if语句的判定条件所决定的,对于核心②,如果mid的取值不进行“+1”后取均值,当l=r-1时,mid的下取整(l+r >> 1 ==l)后,折中的mid仍为左端点,那么对于while(l原创 2024-06-24 09:35:48 · 446 阅读 · 0 评论 -
二维前缀和
核心思想:两个公式:①s[i][j] = s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];②s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]个询问,每个询问包含四个整数 x1,y1,x2,y2。行,每行包含四个整数 x1,y1,x2,y2。,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。第一行包含三个整数 n,m,q。行,每行输出一个询问的结果。列的整数矩阵,再输入 q。个整数,表示整数矩阵。原创 2024-06-25 13:00:44 · 187 阅读 · 0 评论 -
区间合并.
例如:[1,3]和 [2,6]可以合并为一个区间 [1,6]。给定 n个区间 [li,ri],要求合并所有有交集的区间。共一行,包含一个整数,表示合并区间完成后的区间个数。接下来 n行,每行包含两个整数 l和 r。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。第一行包含整数 n。原创 2024-06-27 18:23:21 · 211 阅读 · 0 评论 -
高精度乘法
需要特别注意的时,如果加对于前导零的处理,会使例如“123*0”输出“000”,这是不符合预期的,因此需要加上前导零的处理。本题主要是对于乘法的模拟,和加法类似。给定两个非负整数(不含前导 0。共两行,第一行包含整数 A。1≤A的长度≤100000。,第二行包含整数 B。共一行,包含 A×B。原创 2024-06-25 09:57:22 · 646 阅读 · 0 评论 -
二进制中1的个数
的数列,请你求出数列中每个数的二进制表示中 1。lowbit:取出一个数中的最后一位1。0≤数列中元素的值≤109。个整数,表示整个数列。个数表示数列中的第 i。个数的二进制表示中 1。个整数,其中的第 i。原创 2024-06-27 13:05:22 · 145 阅读 · 0 评论 -
数组模拟单链表
注意:题目中第 k个插入的数并不是指当前链表的第 k个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n个数依次为:第 1个插入的数,第 2个插入的数,…I k x,表示在第 k个插入的数后面插入一个数 x(此操作中 k均大于 0)。D k,表示删除第 k个插入的数后面的数(当 k为 0时,表示删除头结点)。现在要对该链表进行 M次操作,进行完所有操作后,从头到尾输出整个链表。2.删除第 k个插入的数后面的一个数;3.在第 k个插入的数后插入一个数。H x,表示向链表头插入一个数 x。原创 2024-06-27 20:39:31 · 167 阅读 · 0 评论 -
KMP字符串
所有字符串中只包含大小写英文字母以及阿拉伯数字。共一行,输出所有出现位置的起始下标(下标从 0。开始计数),整数之间用空格隔开。中所有出现的位置的起始下标。,以及一个模式串 P。中多次作为子串出现。第二行输入字符串 P。第四行输入字符串 S。原创 2024-06-28 09:04:54 · 182 阅读 · 0 评论 -
二维差分.
个操作,每个操作包含五个整数 x1,y1,x2,y2,c。每个操作都要将选中的子矩阵中的每个元素的值加上 c。个整数,表示所有操作进行完毕后的最终矩阵。表示一个子矩阵的左上角坐标和右下角坐标。−1000≤矩阵内元素的值≤1000。请你将进行完所有操作后的矩阵输出。个整数 x1,y1,x2,y2,c。第一行包含整数 n,m,q。列的整数矩阵,再输入 q。,其中 (x1,y1)个整数,表示整数矩阵。原创 2024-06-25 18:16:00 · 116 阅读 · 0 评论 -
最长连续不重复子序列
的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。个整数(均在 0∼105。范围内),表示整数序列。原创 2024-06-27 00:09:45 · 298 阅读 · 0 评论 -
高精度除法
共两行,第一行输出所求的商,第二行输出所求余数。给定两个非负整数(不含前导 0。共两行,第一行包含整数 A。1≤A的长度≤100000。,第二行包含整数 B。原创 2024-06-25 10:10:40 · 476 阅读 · 0 评论 -
一维差分.
个操作,每个操作包含三个整数 l,r,c。−1000≤整数序列中元素的值≤1000。请你输出进行完所有操作后的序列。行,每行包含三个整数 l,r,c。,表示将序列中 [l,r]第一行包含两个整数 n。个整数,表示整数序列。个整数,表示最终序列。之间的每个数加上 c。原创 2024-06-25 17:19:25 · 209 阅读 · 0 评论 -
Trie字符串统计
对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x在集合中出现的次数。原创 2024-06-28 12:23:36 · 288 阅读 · 0 评论 -
高精度加减法
【代码】高精度加减法。原创 2024-06-25 08:51:24 · 98 阅读 · 0 评论 -
Prim算法
共一行,若存在最小生成树,则输出一个整数,表示最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。接下来 m行,每行包含三个整数 u,v,w,表示点 u和点 v之间存在一条权值为 w的边。给定一个 n个点 m条边的无向图,图中可能存在重边和自环,边权可能为负数。的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G的最小生成树。给定一张边带权的无向图 G=(V,E),其中 V表示图中点的集合,E。表示图中边的集合,n=|V|,m=|E|第一行包含两个整数 n和 m。原创 2024-08-23 15:44:46 · 132 阅读 · 0 评论 -
连通块中点的数量
给定一个包含 n个点(编号为 1∼n)的无向图,初始时图中没有边。原创 2024-06-28 16:29:32 · 142 阅读 · 0 评论 -
求约数之和
给定 n个正整数 ai,请你输出这些数的乘积的约数之和,答案对 109+7。输出一个整数,表示所给正整数的乘积的约数之和,答案需对 109+7。接下来 n 行,每行包含一个整数 ai。第一行包含整数 n。原创 2024-08-24 11:00:33 · 223 阅读 · 0 评论 -
Kruskal算法
由 V中的全部 n个顶点和 E中 n−1条边构成的无向连通子图被称为 G的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G的最小生成树。共一行,若存在最小生成树,则输出一个整数,表示最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。给定一个 n个点 m条边的无向图,图中可能存在重边和自环,边权可能为负数。接下来 m行,每行包含三个整数 u,v,w,表示点 u。原创 2024-08-23 16:32:02 · 223 阅读 · 0 评论 -
筛法求欧拉函数
共一行,包含一个整数,表示 1∼n中每个数的欧拉函数之和。给定一个正整数 n,求 1∼n中每个数的欧拉函数之和。共一行,包含一个整数 n。原创 2024-08-24 15:46:03 · 171 阅读 · 0 评论 -
Floyd算法
共 k行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径,则输出 impossible。接下来 m行,每行包含三个整数 x,y,z,表示存在一条从点 x到点 y的有向边,边长为 z。和 y,表示查询从点 x到点 y的最短距离,如果路径不存在,则输出 impossible。给定一个 n个点 m条边的有向图,图中可能存在重边和自环,边权可能为负数。接下来 k行,每行包含两个整数 x,y,表示询问点 x到点 y的最短距离。再给定 k个询问,每个询问包含两个整数 x。数据保证图中不存在负权回路。原创 2024-08-23 11:22:11 · 159 阅读 · 0 评论 -
试除法求约数
给定 n个正整数 ai对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。输出共 n行,其中第 i行输出第 i个整数 ai的所有约数。接下来 n 行,每行包含一个整数 ai。第一行包含整数 n。原创 2024-08-24 10:05:12 · 198 阅读 · 0 评论 -
Bellman-Ford
请你求出从 1号点到 n号点的最多经过 k条边的最短距离,如果无法从 1号点走到 n号点,输出 impossible。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x到点 y的有向边,边长为 z。给定一个 n个点 m条边的有向图,图中可能存在重边和自环, 边权可能为负数。输出一个整数,表示从 1号点到 n号点的最多经过 k条边的最短距离。如果不存在满足条件的路径,则输出 impossible。注意:图中可能 存在负权回路。第一行包含三个整数 n,m,k。点的编号为 1∼n。原创 2024-08-23 09:50:36 · 143 阅读 · 0 评论 -
字符串哈希
给定一个长度为 n的字符串,再给定 m个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1]和 [l2,r2]这两个区间所包含的字符串子串是否完全相同。接下来 m行,每行包含四个整数 l1,r1,l2,r2,表示一次询问所涉及的两个区间。对于每个询问输出一个结果,如果两个字符串子串完全相同则输出 Yes,否则输出 No。第二行包含一个长度为 n的字符串,字符串中只包含大小写英文字母和数字。第一行包含整数 n和 m,表示字符串长度和询问次数。字符串中只包含大小写英文字母和数字。原创 2024-06-29 11:10:38 · 327 阅读 · 0 评论 -
模拟散列表
【代码】模拟散列表。原创 2024-06-29 10:02:44 · 166 阅读 · 0 评论 -
匈牙利算法解决二分图的最大匹配
二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边集 {E}中的任意两条边都不依附于同一个顶点,则称 M是一个匹配。给定一个二分图,其中左半部包含 n1个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m条边。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。接下来 m行,每行包含两个整数 u和 v,表示左半部点集中的点 u。输出一个整数,表示二分图的最大匹配数。请你求出二分图的最大匹配数。原创 2024-08-23 17:44:30 · 190 阅读 · 0 评论 -
堆排序(手写堆)
输入一个长度为 n的整数数列,从小到大输出前 m小的数。共一行,包含 m个整数,表示整数数列中前 m小的数。第二行包含 n个整数,表示整数数列。第一行包含整数 n和 m。1≤数列中元素≤109。原创 2024-06-28 17:21:46 · 161 阅读 · 0 评论 -
SPFA算法
请你求出 1号点到 n号点的最短距离,如果无法从 1号点走到 n号点,则输出 impossible。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x到点 y 的有向边,边长为 z。接下来 m行每行包含三个整数 x,y,z,表示存在一条从点 x到点 y的有向边,边长为 z。给定一个 n个点 m条边的有向图,图中可能存在重边和自环, 边权可能为负数。给定一个 n个点 m条边的有向图,图中可能存在重边和自环, 边权可能为负数。如果图中存在负权回路,则输出 Yes,否则输出 No。原创 2024-08-23 10:41:34 · 886 阅读 · 0 评论 -
求约数的个数
给定 n个正整数 ai,请你输出这些数的乘积的约数个数,答案对 109+7。输出一个整数,表示所给正整数的乘积的约数个数,答案需对 109+7。接下来 n 行,每行包含一个整数 ai。第一行包含整数 n。原创 2024-08-24 10:53:23 · 179 阅读 · 0 评论 -
排列数字(dfs)
给定一个整数 n,将数字 1∼n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。按字典序输出所有排列方案,每个方案占一行。共一行,包含一个整数 n。原创 2024-06-30 10:35:52 · 298 阅读 · 0 评论 -
n-皇后问题
n−皇后问题是指将 n个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。每个解决方案占 n行,每行输出一个长度为 n的字符串,用来表示完整的棋盘状态。其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。现在给定整数 n,请你输出所有的满足条件的棋子摆法。输出方案的顺序任意,只要不重复且没有遗漏即可。每个方案输出完成后,输出一个空行。注意:行末不能有多余空格。共一行,包含整数 n。原创 2024-06-30 11:44:27 · 149 阅读 · 0 评论 -
欧拉函数.
给定 n个正整数 ai,请你求出每个数的欧拉函数。输出共 n行,每行输出一个正整数 ai的欧拉函数。接下来 n行,每行包含一个正整数 ai。第一行包含整数 n。原创 2024-08-24 15:23:59 · 153 阅读 · 0 评论 -
走迷宫之bfs
最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。数据保证 (1,1)处和 (n,m)处的数字为 0,且一定至少存在一条通路。接下来 n行,每行包含 m个整数(0或 1),表示完整的二维数组迷宫。给定一个 n×m的二维整数数组,用来表示一个迷宫,数组中只包含 0。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。或 1,其中 0表示可以走的路,1表示不可通过的墙壁。输出一个整数,表示从左上角移动至右下角的最少移动次数。原创 2024-08-20 17:32:30 · 132 阅读 · 0 评论