数据结构与算法刷题集
文章平均质量分 76
双非鼠不想认输
盲目的引入新的组件,系统会变得更加脆弱
展开
-
团体程序设计天梯赛-L2练习集
L2-005 集合相似度 (25 分)给定两个整数集合,它们的相似度定义为:Nc/Nt×100%。其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。输入格式:输入第一行给出一个正整数N(≤50),是集合的个数。随后N行,每行对应一个集合。每个集合首先给出一个正整数M(≤104),是集合中元素的个数;然后跟M个[0,109]区间内的整数。之后一行给出一个正整数K(≤2000),随后K行,每行对应一对需要计算相似度原创 2022-03-19 11:25:33 · 568 阅读 · 0 评论 -
团体程序设计天梯赛-L1练习集
团体程序设计天梯赛-L1练习集原创 2022-03-19 11:20:30 · 1439 阅读 · 0 评论 -
天梯选拔赛题目
区间选点给定N个闭区间[ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。1<N<1e5-1e9<ai≤bi≤1e9输入格式:第—行包含整数N,表示区间数。 接下来N行,每行包含两个整数a,bi,表示一个区间的两个端点。输出格式:一个整数输入样例:在这里给出一组输入。例如:3-1 12 43 5输出样例:在这里给出相应的输出。例如:2原创 2022-03-16 17:23:39 · 968 阅读 · 0 评论 -
算法训练第一周题解汇总
大意:在s1找一个最大的 [l,r] 子区间,使其经过从小到大的排序后 能够变成 s2题解:先确定最小的区间,然后慢慢扩大。最小区间的确定:s1和s2第一个不相等的数开始,到最后一个不相等的数结尾向两边扩大区间:如果本来就是从小到大排序的,那么就算sort也无影响,否则停止扩展。原创 2023-04-27 01:14:28 · 1096 阅读 · 0 评论 -
算法训练第二周题解汇总
总结:这周题组给我的感觉是数据规模都比较小,都可以考虑暴力。原创 2023-05-08 14:52:22 · 344 阅读 · 0 评论 -
贪心算法+dp+最短路+搜索+差分+二维前缀和题组
每两个管制路段之间会有一个没有被管制的路段,所以,在第一个坑和第n个坑之间,一共会有m-1个没有被管制的路段,即。题解:这题是一个递推问题,因为a[i][j]可以走到a[i+1][j]和a[i][j+1],所以a[i][j]可以由a[i-1][j]和a[i][j-1]走到。为了使浪费最短,我们就可以用sort对每两个坑之间的距离进行排序,然后用第一个坑到第n个坑之间的距离依次减去前m-1个最短的浪费长度(两个坑之间的距离),就可以求出答案了。,这样可以叠加的积分就不会被浪费了,然后取个最大的即可。原创 2022-10-04 19:55:35 · 505 阅读 · 0 评论 -
二分答案+并查集+搜索+dp+最短路题组
我们可以为每一个球都建立一个结点,然后用O(n^2)的时间完成并查集处理,最后查询 与下表面接触的球体中 是否有和 与上表面接触的球体 在同一个集合中 的球体(有些拗口,理解就好)。如果该位置的值是 1,则 dp(i,j) 的值由其上方、左方和左上方的三个相邻位置的 dp 值决定。因为只能用那一周及之前的兽径建树,而在快排的时候边会被打乱,所以我们在结构体存边时要加一个参数,记录该边是第几周的兽径。用动态规划解,用dp(i, j) 表示以 (i, j)为右下角, 且只包含 1 的正方形的边长最大值。原创 2022-10-03 16:04:32 · 765 阅读 · 0 评论 -
最短路与并查集题组
题解:这题的核心就是不断地把最小的两个果堆取出来相加,合起来的果堆数又需要放回去,要使这些果堆数仍然保持从小到大排列我们可以使用STL中的优先队列,接下来这题就是一道水题了。当一个点不能被当前点更新时,判断如果这个点的距离等于当前点距离+1的话,那么可到达这个点的最短路有一种是通过先到达上个点再走当前边的方式得到的,易推得代码。ps:洛谷太恶心了,我开题目给的数据范围+1的数组大小给我报超时,,,我把数组开大点终于过了最后两个点,太恶心人了,你好歹报个空间异常也好啊。如果这个点的最短路可以更新,即。原创 2022-09-26 21:35:17 · 347 阅读 · 0 评论 -
二叉树的最大深度
二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。思路:我的想法是先序遍历完所有结点,不断更新maxdepth即可class Solution {public: int maxdepth=1; .........原创 2022-04-18 21:52:44 · 91 阅读 · 0 评论 -
二叉树的前序遍历,二叉树的中序遍历,二叉树的后序遍历,二叉树的层序遍历
144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com)思路:非常简单的一题,运用递归就能解决。定义一个函数,因为是求前序遍历,如果该树节点不为空,先将该树节点的数据域插入到vector的容器中,然后再分别递归左子树和右子树。二叉树的中序遍历94. 二叉树的中序遍历 - 力扣(LeetCode) (leetcode-cn.com)二叉树的后序遍历145. 二叉树的后序遍历 - 力扣(LeetCode) (leetcode-cn.com)二叉树的层原创 2022-04-17 21:28:53 · 1173 阅读 · 0 评论 -
最长上升子序列 (动态规划)
给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式:第一行包含整数 N。第二行包含 N 个整数,表示完整序列。1≤N≤1000,−109≤数列中的数≤109输出格式:输出一个整数,表示最大长度,结尾无空格换行。输入样例:在这里给出一组输入。例如:75 2 8 3 1 4 5输出样例:在这里给出相应的输出。例如:4思路:记dp[i]为以i结尾的最长上升子序列,dp[i]刚开始都默认为1,意为从当前点开始的最长上升子序列原创 2022-03-10 21:35:13 · 450 阅读 · 0 评论 -
先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数
对于给定的二叉树,输出其先序序列、中序序列、后序序列并输出叶子结点数。输入格式:二叉树的先序遍历序列。提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。输出格式:若是非空二叉树,则输出四行内容 第一行是二叉树的先序遍历序列; 第二行是二叉树的中序遍历序列; 第三行是二叉树的后序遍历序列; 第四行是叶子结点数;若是空二叉树 只需输出叶子数0输入样例1:FCA##DB###EHM###G##输出样例1:原创 2022-03-10 20:46:18 · 3188 阅读 · 2 评论 -
最小生成树所有题解
1.今天学习了Kruskal算法和Prim算法。2.完成最小生成树的所有题目。- [P3366 【模板】最小生成树](https://www.luogu.com.cn/problem/P3366)题解:该题为模板题,我用的是Kruskal算法。Kruskal算法核心思想:将所有边根据边权从小到大排序,每次从剩余的边中选择权值较小且边的两个顶点不在同一个集合的边(即不会产生回路的边),加入到生成树中,直到加入了n-1条边为止。//kruskal#include<bits/st原创 2022-02-16 10:16:55 · 1268 阅读 · 0 评论 -
最短路的所有题解
- [P1359 租用游艇](https://www.luogu.com.cn/problem/P1359)题解:这题就是求1到n的最短路,可以看到n<=200,所以这题可以用floyd来解,注意的是它的输入是半矩阵的,要正确存图。#include<stdio.h>#define inf 0x3f3f3f3fint e[201][201];int main(){ int n; scanf("%d",&n); for(int i=1...原创 2022-02-15 10:23:24 · 473 阅读 · 0 评论 -
hash,kmp题组所有题解
目录【模板】字符串哈希【模板】KMP字符串匹配于是他错误的点名开始了A-B 数对Barn Echoes GCompress Words【模板】字符串哈希- [P3370 【模板】字符串哈希](https://www.luogu.com.cn/problem/P3370)题解:对每个字符串进制哈希,并将哈希值存到ans数组里,统计里面不一样的值的个数,输出即可。代码实现如下:#include<bits/stdc++.h>using name原创 2022-02-14 11:17:15 · 436 阅读 · 2 评论 -
第二周题组题解
目录【模板】快速排序亲戚【模板】并查集新二叉树求先序排列美国血统 American Heritage遍历问题修复公路二叉树深度朋友搭配购买【模板】快速排序- [P1177 【模板】快速排序](https://www.luogu.com.cn/problem/P1177)这种模板题只要理解了快排的思想就可以直接敲出来#include<stdio.h>int num[100010];void quicksort(int lef原创 2022-01-23 13:41:51 · 404 阅读 · 0 评论 -
第一周所有搜索题解
目录n皇后自然数拆分- [P1219 [USACO1.5]八皇后 Checker Challenge](https://www.luogu.com.cn/problem/P1219)我在这里想介绍一下如何用dfs解n皇后。dfs一般会用到递归,所以首先我们应该确认递归参数,终止条件,递归搜索逻辑。题目分析:递归参数很明显为行数row,终止条件即为row>输入的行数n,此时回溯。根据题目意思,在处理递归节点时,同一列不能放,对角线都不能放,同一行也不能放(但在实际操....原创 2022-01-16 11:20:30 · 183 阅读 · 0 评论 -
利用栈的相关知识检验括号是否匹配
栈的相关特点相信大家都知道,那么我们如何利用它来检验括号是否匹配呢。主要思路如下:1.扫描整个表达式;2.判断当前字符是否为括号(左右括号)①如果不是,则继续扫描下一个字符;②如果是,则判断当前操作符是否为左括号若为左括号—>直接入栈。若栈为空—> 说明此表达式右括号多于左括号。若栈为空—> 说明此表达式右括号多于左括号。若栈不为空—>判断当前操作符是否和栈顶操作符匹配,若不匹配—->说明左右括号不匹配,若匹配—–>则继续判断下一个操作符。3.最原创 2021-12-16 22:55:12 · 3632 阅读 · 0 评论 -
栈的相关题目以及出栈时的规律
今天做了两个有关栈的题目,都需要用到出栈时的规律。那么问题来了,出栈时的规律时什么呢?原创 2021-12-15 23:56:13 · 2297 阅读 · 0 评论