数据结构
Looy_cai
愿你能够
成为优秀的人
展开
-
指纹锁(set 自定义比较用法)
LINK、题目样例示例1输入4 3add 1add 10query 5query 4输出NoYes示例2输入4 3add 1query 4del 1query 4输出YesNo示例3输入6 3add 10query 10add 5query 5del 7 //系统将指纹10和指纹5全部删除query 8输出YesYesNo备注:对于100%的测试数据:1 ≤ k,m ≤ 1000000数据量较大,注意使用更快的输入输出方式。原创 2022-04-05 12:59:27 · 484 阅读 · 0 评论 -
完美主义(线段树裸题)
传送门题目:示例1输入7 41 2 2 4 3 4 51 1 42 1 72 6 72 4 7输出NoYesNo思路:利用差分,结点放置指定区间的最小差分值,若指定区间最小值小于0则说明此区间不完美,反之则完美;代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;//#define int long longconst int N=3e5+10;const int mo原创 2021-10-28 22:07:26 · 115 阅读 · 0 评论 -
Bakry and Partitioning(树、xor理解、dfs、思维)
传送门题目:Exampleinput52 21 31 25 53 3 3 3 31 22 31 44 55 21 7 2 3 51 22 31 44 55 31 6 4 1 21 22 31 44 53 31 7 41 22 3outputNOYESNOYESNO大致题意:给出包含nnn个节点n−1n-1n−1条边的一棵树,每个节点有对应的点权,给出kkk,要求删除至少一条边,至多k−1k-1k−1条边,若存在某种方案,使删边原创 2021-10-05 18:44:18 · 163 阅读 · 0 评论 -
D. The Strongest Build(STL、思维)
传送门Examplesinput33 1 2 32 1 53 2 4 623 2 33 2 2output2 2 3input33 1 2 32 1 53 2 4 623 2 32 2 3output1 2 3input33 1 2 32 1 53 2 4 623 2 32 2 3output3 2 2input41 101 41 71 30output1 1 1 1大致翻译:大致题意:给定数组个数n,输出每组数据的个数和原创 2021-10-05 18:25:18 · 151 阅读 · 3 评论 -
P5629 【AFOI-19】区间与除法(ST,unordered_map,unique,思维,mp.find(j)!=mp.end()比mp[j]快)
传送门题目:输入输出样例输入 #12 3 3 30 206 6 61 12 21 2输出 #1011输入 #26 3 3 36 5 10 15 19 72 5 101 61 44 6输出 #2332思路:听说unordered_map的查找速度比map快mp.find(j)!=mp.end()这里换mp[j]!=0会TLE代码:#include <bits/stdc++.h>#include<unordered_map>原创 2021-09-13 17:23:19 · 369 阅读 · 0 评论 -
P7167 [eJOI 2020 Day1] Fountain(st、倍增(思维?)
传送门题目:思路:做一个下一个流到哪的表和总容量表代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//#define int long longconst int N=1e5+10;const int inf=0x3f3f3f3f;const double pi=acos(-1);const double eps=1e-10;//ne[i][j]:第j个盘溢出i+1次流到的位置/原创 2021-09-11 20:53:34 · 236 阅读 · 0 评论 -
P3865 【模板】ST 表
传送门题目:ST的一些知识点:(也可以用树状数组或线段树求区间最值)代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+10;int a[N],f[N][50];void st_set(int n){//预处理 for(int i=0;i<n;i++)f[i][0]=a[i]; for(int i=1,maxx=log2(n);i<=m原创 2021-09-08 12:01:16 · 109 阅读 · 0 评论 -
魔怔(欧拉回路+并查集)
传送门题目:首先理解题意:一开始蒙了都不知道样例给出的数据都是哪两个点之间的连线情况……以样例中第一组为例:0:代表2与1(0)之间的连线;1 1:分别代表3与1(1)、3与2(1)之间的连线;1 1 0:分别代表4与1(1)、4与2(1)、4与3(0)之间的连线;1 1 0 0:分别代表5与1(1)、5与2(1)、5与3(0)、5与4(0)之间的连线;下面用一张图模拟一下样例中第一组数据的图:思路:这里的思考涉及了欧拉回路的知识,可以自行了解一下!欧拉回路的思想是解决这题的前原创 2021-08-05 17:13:21 · 124 阅读 · 0 评论 -
基础实验4-2.3 二叉树的非递归遍历(前序中序后序)
题目本题要求用非递归的方法实现对给定二叉树的 3 种遍历。函数接口定义:void InorderTraversal( BinTree BT );void PreorderTraversal( BinTree BT );void PostorderTraversal( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementTy原创 2021-03-01 22:47:59 · 570 阅读 · 0 评论 -
案例4-1.6 树种统计(map,map中first是否出现过的一个判断)
题目随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。输入格式:输入首先给出正整数N(≤105 ),随后N行,每行给出卫星观测到的一棵树的种类名称。种类名称由不超过30个英文字母和空格组成(大小写不区分)。输出格式:按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后4位。输入样例:29Red AlderAshAspenBasswoodAshBeechYello原创 2021-02-28 22:54:58 · 116 阅读 · 0 评论 -
进阶实验3-3.1 求前缀表达式的值(栈,string转化成数字的用法)
题目算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。输入格式:输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。输出格式:输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR。输入样例:2 * 3 - 7 4 / 8 4输出样例:1原创 2021-02-28 22:26:20 · 308 阅读 · 0 评论 -
基础实验3-2.5 堆栈模拟队列(stack)
题目设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数:int IsFull(Stack S):判断堆栈S是否已满,返回1或0;int IsEmpty (Stack S ):判断堆栈S是否为空,返回1或0;void Push(Stack S, ElementType item ):将元素item压入堆栈S;ElementType Pop(Stack S ):删除并返回S的栈顶元素。实现队列的操作,即入队void AddQ(Ele原创 2021-02-28 11:17:06 · 318 阅读 · 0 评论 -
基础实验3-2.4 出栈序列的合法性(stack和queue的妙用~~~)
题目给定一个最大容量为 M 的堆栈,将 N 个数字按 1, 2, 3, …, N 的顺序入栈,允许按任何顺序出栈,则哪些数字序列是不可能得到的?例如给定 M=5、N=7,则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 },但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。输入格式:输入第一行给出 3 个不超过 1000 的正整数:M(堆栈最大容量)、N(入栈元素个数)、K(待检查的出栈序列个数)。最后 K 行,每行给出 N 个数字的出栈序列。所有同行数字以空格间隔。输出格式:原创 2021-02-27 22:50:32 · 965 阅读 · 0 评论 -
进阶实验2-3.4 素因子分解
题目给定某个正整数 N,求其素因子分解结果,即给出其因式分解表达式 N=p1k1 ⋅p2k2 ⋯pmkm。输入格式:输入long int范围内的正整数 N。输出格式:按给定格式输出N的素因式分解表达式,即 N=p1k1*p2k2*…*pm^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki为1即因子pi只有一个时不输出ki。输入样例:1323输出样例:1323=3^3*7^2思路:由于从2开始计算所以2除不完后2的倍数一定也除不了,同理可得3,5,7,原创 2021-02-26 22:02:04 · 634 阅读 · 0 评论 -
进阶实验2-3.3 两个有序链表序列的交集(数组的用法)
题目已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 2 5 -12 4 5 8 10 -1输出样例:2 5数组的写法:【大数据也可噢~】#include <bits/stdc++.h>usin原创 2021-02-26 21:55:32 · 169 阅读 · 0 评论 -
习题4.3 是否二叉搜索树(二叉搜索树的性质/中序遍历)
题目本题要求实现函数,判断给定二叉树是否二叉搜索树。函数接口定义:bool IsBST ( BinTree T );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};函数IsBST须判断给定的T是否二叉搜索树,即满足如下定义的二叉树:定义:一个二原创 2021-02-24 23:28:12 · 446 阅读 · 1 评论 -
习题3.13 双端队列(循环队列/循环数组)
题目双端队列(deque,即double-ended queue的缩写)是一种具有队列和栈性质的数据结构,即可以(也只能)在线性表的两端进行插入和删除。若以顺序存储方式实现双端队列,请编写例程实现下列操作:Push(X,D):将元素X插入到双端队列D的头;Pop(D):删除双端队列D的头元素,并返回;Inject(X,D):将元素X插入到双端队列D的尾部;Eject(D):删除双端队列D的尾部元素,并返回。函数接口定义:bool Push( ElementType X, Deque D );原创 2021-02-24 23:08:13 · 383 阅读 · 0 评论 -
习题3.12 另类循环队列(循环队列/循环数组)
题目如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。函数接口定义:bool AddQ( Queue Q, ElementType X );ElementType DeleteQ( Queue Q );其中Queue结构定义如下:typedef int Position;typedef struct QNode *PtrToQNode;struct QNode { ElementT原创 2021-02-24 22:42:09 · 479 阅读 · 0 评论 -
习题3.14 另类堆栈(pop,push)
题目在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满?函数接口定义:bool Push( Stack S, ElementType X );ElementType Pop( Stack S );其中Stack结构定义如下:typedef int Position;typedef struct SNode *PtrToSNode;struct SNode { ElementType *Data;原创 2021-02-24 22:17:00 · 1145 阅读 · 0 评论 -
习题5.13 词频统计(map,vector)
题目请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。输入格式:输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。输出格式:在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。随后按照词频递原创 2021-02-24 11:14:48 · 545 阅读 · 0 评论 -
练习4.3 堆中的路径(堆——小顶堆)
题目将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。输入样例:5 346 23 26 24 105原创 2021-02-23 22:16:53 · 257 阅读 · 0 评论 -
练习4.2 平衡二叉树的根 (难啊难)
题目将给定的一系列数字插入初始为空的AVL树,请你输出最后生成的AVL树的根结点的值。输入格式:输入的第一行给出一个正整数N(≤20),随后一行给出N个不同的整数,其间以空格分隔。输出格式:在一行中输出顺序插入上述整数到一棵初始为空的AVL树后,该树的根结点的值。输入样例1:588 70 61 96 120输出样例1:70输入样例2:788 70 61 96 120 90 65输出样例2:88前提知识:代码不太会……#include <bits/stdc++原创 2021-02-23 18:39:39 · 747 阅读 · 0 评论 -
练习4.1 根据后序和中序遍历输出先序遍历(二叉树,数组调用)
题目第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。输出格式:在一行中输出Preorder: 以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:Preorder: 4 1 3 2 6 5 7思路:首先要了解先序中序后序遍历关于左右子树和根的先后顺序;先序遍历:根 左 右;中序遍历:左 根 右原创 2021-02-23 12:21:50 · 491 阅读 · 0 评论