随笔分类 -  STL - map/set

摘要:题目大意:给定一棵 N 个节点的树,点有点权,边有边权,给定 M 个询问,每次询问距离 U 节点不超过 R 的点集中,点权最大的点的编号是多少,若有相同点权,取编号较小的点。 题解: 发现是多组询问,而且涉及的问题很难通过子树信息合并来解决。同时距离 U 节点不超过 R 等价于 U 与 V 路径距离 阅读全文
posted @ 2019-06-08 16:07 shellpicker 阅读(149) 评论(0) 推荐(0)
摘要:题目大意:给定一个长度为 N 的序列,求序列中最大值和最小值相差小于 K 的连续段的个数。 题解: 最大值和最小值相差不超过 K 是一个在值域角度的限制,应考虑采用平衡树或权值...数据结构进行维护。 连续的一段即可考虑采用双指针进行维护即可。 注意: r 是 当前需要判断 的情况,故 r 从 1 阅读全文
posted @ 2019-05-27 09:55 shellpicker 阅读(139) 评论(0) 推荐(0)
摘要:题目大意:给定一个有 N 个数组成的序列,在此基础上构建一棵二叉排序树,求每个节点(根节点除外)的父节点的编号是多少。 题解:首先,根据二叉排序树的不稳定性,直接模拟构建二叉排序树肯定会超时,因此需要用其他的数据结构来模拟 BST。在这里可以用平衡树来模拟,即:用一个 $set$ 来维护这 N 个序 阅读全文
posted @ 2018-12-02 21:01 shellpicker 阅读(204) 评论(0) 推荐(0)
摘要:题目大意:给定一个有向图,求图中最长路。 题解:直接拓扑排序后按照拓扑序枚举即可。处理时应将字符串通过 map 映射成一个点,同时注意字符串大小写转换,C++ string 中没有提供直接大小写转换的函数,因此需要自己手动遍历,进行 $tolower()$ 函数调用。 代码如下 阅读全文
posted @ 2018-12-01 19:47 shellpicker 阅读(394) 评论(0) 推荐(0)
摘要:题解:普通的 BFS 没什么可说的,字符串处理是这道题的难点,同时需要注意哈希判重。 另外,对于 $string$ 类来说,学到了一个 push_back((char)) 操作。 "c++string类详解" 代码如下 cpp include using namespace std; int n; 阅读全文
posted @ 2018-11-30 22:37 shellpicker 阅读(169) 评论(0) 推荐(0)
摘要:题目大意:给定 N 个整数组成的集合,向集合中添加一个整数,使得这 N+1 个整数组成等差数列,求这样的整数有多少个。 题解: 引理1:若原集合中只有一个元素,则有无数种可能。 引理2:若原集合中有且仅有两个整数,则最多可能有 3 种答案。 引理3:若原集合已经能够组成等差数列,则只能在序列首尾添加 阅读全文
posted @ 2018-11-28 22:06 shellpicker 阅读(254) 评论(0) 推荐(0)
摘要:map支持以下功能: 1. size():查询 map 中的 key 的个数 2. empty():判空 3. clear():清空 4. insert()/erase():插入/删除 5. find(x):查找 key 为 x 的键值对,若不存在,返回末尾迭代器(时间复杂度为 $O(n logn) 阅读全文
posted @ 2018-11-28 21:59 shellpicker 阅读(148) 评论(0) 推荐(0)
摘要:对于这道题来说,每个时刻的状态是整个棋盘所有棋子的位置,即:任何一个棋子位置发生了移动,都会使得状态转移。 因此,需要采取将整个状态作为广搜的搜索对象,进行状态压缩。采用哈希得到每个状态的对应的数值,同时维护一个 map 判重即可,顺便记录走到当前状态所需的最短步数。 代码如下 阅读全文
posted @ 2018-11-06 21:53 shellpicker 阅读(283) 评论(0) 推荐(0)
摘要:哈希表是一种用空间来换取时间的高效桶式数据结构,一般可以在常数时间内回答对某个元素性质的询问。 一般在出现 对于每个x有多少个P(x)符合要求 这种情况时,经常用哈希表来存储x,同时x也称作关键字(key),这意味着对于每个x,都会对应一个符合条件的val值。 用途 1. 哈希判重 我们可以开一个$ 阅读全文
posted @ 2018-10-23 18:58 shellpicker 阅读(258) 评论(0) 推荐(0)
摘要:一个长度为 n 的序列,最少改变多少个数,使得其成为一个公差为 d 的等差序列。 题解:对于任意一个位置的数 a[ i ] ,如果这个数不变的话,那么所有与它相差 $k d$ 的数都不需要改变。因此,有等式$a[i] a[j]=d (i j)$成立时,这个数也不需要改变,左右移项整理得$a[i] i 阅读全文
posted @ 2018-10-20 22:56 shellpicker 阅读(223) 评论(0) 推荐(0)