07 2020 档案

摘要:####题目大意: 第一行输入N,C 第二行输入n个数字 输出,求A - B = C的数对个数 ####样例 4 1 1 1 2 3 ####输出 3 思路:用STL容器map,map<num, times>,建立一个数字出现的次数的映射,题目要求是A - B = C,我们将其转换成A - C = 阅读全文
posted @ 2020-07-29 18:44 Xxaj5 阅读(289) 评论(0) 推荐(0) 编辑
摘要:####首先明白什么是拓扑序列? 只有有向图才会有拓扑序列,每一条边的起点都在终点之前 例如: 但如果是这样子的 有向图中存在一个环 则它就不存在拓扑序列。 ####拓扑图:有向无环图一定存在拓扑序列,因此有向无环图也叫做拓扑图,所有入度为0的节点都可以作为起点,因此拓扑序列并不唯一。** 有向无环 阅读全文
posted @ 2020-07-29 15:07 Xxaj5 阅读(271) 评论(0) 推荐(0) 编辑
摘要:###例题 给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。 输入格式 第一行包含整数n,表示树的结 阅读全文
posted @ 2020-07-29 14:35 Xxaj5 阅读(342) 评论(0) 推荐(0) 编辑
摘要:###例题:图中点的层次 给定一个n个点m条边的有向图,图中可能存在重边和自环。 所有边的长度都是1,点的编号为1~n。 请你求出1号点到n号点的最短距离,如果从1号点无法走到n号点,输出-1。 输入格式 第一行包含两个整数n和m。 接下来m行,每行包含两个整数a和b,表示存在一条从a走到b的长度为 阅读全文
posted @ 2020-07-29 14:26 Xxaj5 阅读(192) 评论(0) 推荐(0) 编辑
摘要:DFS与栈密切相关,则BFS与队列密切相关 BFS常用于求最短路,最小步数,最小距离等问题 个人理解:BFS常用来搜最短路,它是一层一层的搜索,因此它搜的距离一定是最短距离,需要用队列保存每一层的状态,从根节点开始,根节点入队,然后队列不空,进入循环,取出队列头,开始扩展它下一层的点,如果这些点都符 阅读全文
posted @ 2020-07-28 16:08 Xxaj5 阅读(170) 评论(0) 推荐(0) 编辑
摘要:###全排列问题 给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数n。 输出格式 按字典序输出所有排列方案,每个方案占一行。 数据范围 1≤n≤7 输入样例: 3 输出样例: 1 2 3 1 3 2 2 1 3 阅读全文
posted @ 2020-07-28 15:44 Xxaj5 阅读(108) 评论(0) 推荐(0) 编辑
摘要:memset是按照字节赋值,一个字符是一个字节,因此对字符数组可以初始化为任何值,而对int数组就不是这样了 例如:常用memset(a,-1,sizeof(a)) 原理就是:-1在计算机储存是11111111,int是四个字节,每个字节(一个字节八位)全部赋值为-1,因此32位2进制结合起来就是- 阅读全文
posted @ 2020-07-25 16:21 Xxaj5 阅读(264) 评论(0) 推荐(0) 编辑
摘要:C++STL中已经有了现成的堆即:优先级队列(priority_queue),是大根堆 这里主要是用数组模拟的堆(小根堆): x的左儿子下标:2x x的右儿子下标:2x+1 堆是一颗完全二叉树。 主要操作: up操作:up操作是只与当前节点的父节点进行比较,若父结点比当前结点大,则进行交换,实现up 阅读全文
posted @ 2020-07-25 15:25 Xxaj5 阅读(102) 评论(0) 推荐(0) 编辑
摘要:散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。 (来自维基百科) 其中前边说到的离散化也是一 阅读全文
posted @ 2020-07-24 20:23 Xxaj5 阅读(649) 评论(0) 推荐(0) 编辑
摘要:并查集的主要操作有两个: 1.将两个集合合并 2.询问两个元素是否在一个集合中 每一个集合用一棵树表示,树根编号就是整个集合的编号,每个节点储存的是它的父节点,p[x]表示x的父节点 则关于这两个操作: 1.如何判断树根: if(p[x] == x) 2.如何求x的集合编号(即如何找到x所在集合的树 阅读全文
posted @ 2020-07-24 17:56 Xxaj5 阅读(124) 评论(0) 推荐(0) 编辑
摘要:###Trie字符串统计 维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x; “Q x”询问一个字符串在集合中出现了多少次。 共有N个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。 输入格式 第一行包含整数N,表示操作数。 接下来N行,每行包含一个操作指令, 阅读全文
posted @ 2020-07-24 17:37 Xxaj5 阅读(127) 评论(0) 推荐(0) 编辑
摘要:给定一个大小为n ≤ 10^6的数组。 有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。 您只能在窗口中看到k个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: 该数组为[1 3 -1 -3 5 3 6 7],k为3。 窗口位置 最小值 最大值 [1 3 -1] -3 5 3 6 7 阅读全文
posted @ 2020-07-18 15:27 Xxaj5 阅读(178) 评论(0) 推荐(0) 编辑
摘要:给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。 输入格式 第一行包含整数N,表示数列长度。 第二行包含N个整数,表示整数数列。 输出格式 共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。 数据范围 1 ≤ N ≤ 105 阅读全文
posted @ 2020-07-18 14:37 Xxaj5 阅读(88) 评论(0) 推荐(0) 编辑
摘要:###模拟栈 实现一个栈,栈初始为空,支持四种操作: (1) “push x” – 向栈顶插入一个数x; (2) “pop” – 从栈顶弹出一个数; (3) “empty” – 判断栈是否为空; (4) “query” – 查询栈顶元素。 现在要对栈进行M个操作,其中的每个操作3和操作4都要输出相应 阅读全文
posted @ 2020-07-18 14:30 Xxaj5 阅读(231) 评论(0) 推荐(0) 编辑
摘要:实现一个双链表,双链表初始为空,支持5种操作: (1) 在最左侧插入一个数; (2) 在最右侧插入一个数; (3) 将第k个插入的数删除; (4) 在第k个插入的数左侧插入一个数; (5) 在第k个插入的数右侧插入一个数 现在要对该链表进行M次操作,进行完所有操作后,从左到右输出整个链表。 注意:题 阅读全文
posted @ 2020-07-18 14:24 Xxaj5 阅读(179) 评论(0) 推荐(0) 编辑
摘要:实现一个单链表,链表初始为空,支持三种操作: (1) 向链表头插入一个数; (2) 删除第k个插入的数后面的数; (3) 在第k个插入的数后插入一个数 现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。 注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了 阅读全文
posted @ 2020-07-18 14:10 Xxaj5 阅读(257) 评论(0) 推荐(0) 编辑
摘要:给定 n 个区间 [li,ri],要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个数。 例如:[1,3]和[2,6]可以合并为一个区间[1,6]。 输入格式 第一行包含整数n。 接下来n行,每行包含两个整数 l 和 r。 输出格式 共一行,包含一个整数,表示合并 阅读全文
posted @ 2020-07-18 14:00 Xxaj5 阅读(336) 评论(0) 推荐(0) 编辑
摘要:##离散化:离散化就是把大范围的数,映射到一个小范围,即把无限空间中的有限个体,映射到有限空间中去,以此来提高算法的时空效率。 ##例题:求区间和 假定有一个无限长的数轴,数轴上每个坐标上的数都是0。 现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。 接下来,进行 m 次询问,每个询 阅读全文
posted @ 2020-07-18 13:53 Xxaj5 阅读(194) 评论(0) 推荐(0) 编辑
摘要:二进制中1的个数 给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。 输入格式 第一行包含整数n。 第二行包含n个整数,表示整个数列。 输出格式 共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。 数据范围 1 ≤ n ≤ 100000, 0≤ 阅读全文
posted @ 2020-07-18 13:24 Xxaj5 阅读(180) 评论(0) 推荐(0) 编辑
摘要:首先看双指针的的模板 for(int i = 0; i < n; i++) { while(j < i && check(i, j)) j++; //每道题目的具体逻辑 } 最简单的应用可以求字符串中单词的个数,假设每个单词后都有一个空格 #include <iostream> #include < 阅读全文
posted @ 2020-07-18 13:11 Xxaj5 阅读(273) 评论(1) 推荐(0) 编辑
摘要:1 scanf("%[^\n]", s); ^是”非“ \n是换行 所以这就是一直读到\n才结束 阅读全文
posted @ 2020-07-11 09:47 Xxaj5 阅读(194) 评论(0) 推荐(0) 编辑
摘要:###一维前缀和 很简单,可以联想等差数列求每一段和的公式 Sij = Sj - Si 一维的前缀和的初始化就是 S[i] = S[i-1] + a[i] 前缀和数组从1开始初始化 所以想要求 x -> y 段和 公式就是 res = S[y] - S[x-1] ####代码 #include<io 阅读全文
posted @ 2020-07-09 18:02 Xxaj5 阅读(162) 评论(0) 推荐(0) 编辑
摘要:###高精加 #include<iostream> #include<vector> #include<string> using namespace std; vector<int> add(vector<int> &A, vector<int> &B) { vector<int> C; int 阅读全文
posted @ 2020-07-07 19:50 Xxaj5 阅读(328) 评论(0) 推荐(0) 编辑
摘要:ios::sync_with_stdio(false) :用来关闭iostream与stdio的同步,从而提高 cin cout 的效率,但是就不能再用 scanf printf 了,因为不关闭之前是C++为了与C兼容,以免 cout 与 printf 一块使用时造成混乱,才打开同步,这样可以提高一 阅读全文
posted @ 2020-07-07 19:47 Xxaj5 阅读(229) 评论(0) 推荐(0) 编辑
摘要:###原题: 给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。 对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。 如果数组中不存在该元素,则返回“-1 -1”。 输入格式 第一行包含整数n和q,表示数组长度和询问个数。 第二行包含n个整数(均在1~10000范围内) 阅读全文
posted @ 2020-07-05 20:16 Xxaj5 阅读(225) 评论(0) 推荐(1) 编辑
摘要:算法时间复杂度:妥妥的nlogn 步骤: 1.确定分界点 mid = (l+r) >> 1 2.递归排序左右两边 3.归并——合二为一(用两个指针,分别指向两个序列) 就是递归到最底部,然后对小部分排序,归并为大部分。 代码模板: void merge_sort(int q[], int l, in 阅读全文
posted @ 2020-07-05 16:32 Xxaj5 阅读(208) 评论(0) 推荐(1) 编辑
摘要:快速排序大体分为三个步骤: 1.确定分界点 q[(l+r) >> 1] 或者 q[(l+r+1) >> 1] ,两者得看情况而定,不能用 q[l] 或者 q[r] 了 因为会超时。 2.调整区间范围,让小于等于x的放在左边,大于等于x的数放在右边。 3.递归处理左右两端。 模板代码: void qu 阅读全文
posted @ 2020-07-04 15:02 Xxaj5 阅读(426) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示