09 2022 档案
摘要:h[]数组记录的是当前余数的头指针(这个相当于链表的头插法),en[]数组就是记录链表的指向 #include <cstring> #include <iostream> using namespace std; const int N = 1e5 + 3; // 取大于1e5的第一个质数,取质数冲
阅读全文
摘要:这里是维护一个m大小的堆,每一个比堆顶小的数字都放进来进行一次heapify。 题目的意思我以为是只需要输出前m小的数字不需要排序,但是看答案意思需要,所以最后麻烦了一下 #include<bits/stdc++.h> using namespace std; const int N = 10001
阅读全文
摘要:并查集: 将两个集合合并 询问两个元素是否在同一个集合里 基本原理: 每个集合用一棵树来表示,树根的编号就是整个集合的编号,每个节点储存他的父节点,p[x]表示x的父节点 判断父节点 if(p[x] == x) 如何求x的集合编号: while(p[x] != x) x = p[x] 如何合并两个集
阅读全文
摘要:这个问题在于理解son这个数组,首先字典树可以理解为一层一层的, 为什么这个数组是son[N][26], 最长长度的字符串有N个字母,每个字母有26种可能所以就是这样。(其实一个字符串比如abc,可以算三种情况, a, ab, abc。) 比如这个: son[0]就理解为第一层,也就是字符串第一个字
阅读全文
摘要:分为两步, 第一步先求出next数组, next数组的作用 //next[i] = j 的意思是 p[1,j] = p[i - j + 1, i],也就是前后缀相同的最长长度 比如 abbab 这个的 next[5]=2 abbab这个前后缀最长相同长度为2 // 也就是 ab=ab //next[
阅读全文
摘要:如果用普通窗口 每一次往右边移动一格(时间n)进行一次判断(时间k)需要 nk 的时间复杂度 用排序好的窗口, 比如一开始输入 8 3 1 3 -1 -3 5 3 6 7 先是 1 这个数字再窗口内, 然后 由于第二个数字 3比1要小所以不记录队列中 再是 -1 这个数字 比1小所以记录 此时队列为
阅读全文