摘要:
前置知识 基数+计数排序 后缀排序 不考虑暴力了,直接搞上正解。 我们设 \(sa[i],rk[i]\) 分别表示第 \(i\) 名的子串初始点在哪,以及以 \(i\) 开头的子串的排名。 我们考虑倍增的做法。先将长度为 \(1\) 的子串排序求出。 然后每次倍增长度,设长度为 \(w\),然后我们 阅读全文
摘要:
基数排序思想就是先按照优先级低的关键字排序,然后一层层来就可以得到正确的答案。 先来理解其正确性:我们对于一串数的低优先级关键字排序后,得到的序列再按照高优先级关键字排序,就可以得到相同高关键字内按照低关键字排序的结果。但是要保证不在高关键字排序下无故交换原本的序列顺序。 可能你要问这样做的话为什么 阅读全文
摘要:
最近才发现的一个套路,以前以为二进制分组只能搞背包,结果发现还有一些更为优秀的操作。 我们对于一个不支持动态操作的数据结构,拆分为 $log$ 个,然后每次加入元素加入到一个新的组中,如果最新的两个数据结构元素个数相等,就合并两个元素。然后暴力重构这个合并得到的数据结构。 然后查询的时候就查询每一个 阅读全文
摘要:
虽然没什么特别需要说的,但还是建了这么个东西。 文章都可以在分类和标签中找到!实在找不到还可以站内搜索。 lougu Link 阅读全文
摘要:
简单的东西就简单说说把,实际上就是一棵树,每条边上有一个字符,然后一个点代表的字符就是根到达它的路径上的字符按遍历顺序组成的字符串。 #include<bits/stdc++.h> using namespace std; int n,m; int edge[500010][26],tot; int 阅读全文
摘要:
思想:把字符串变成数值比较。 我们选取这个 hash 公式: \[hash(s)=\sum_{i=1}^{len} s_i\times p^{len-i}(mod\ M) \]hash方法 自然溢出hash 我们使用 unsigned long long hash[N]; (\(hash[k]\)) 阅读全文
摘要:
手动模拟出奇迹 #include<bits/stdc++.h> using namespace std; inline int read(){ int s=0,f=1; char ch=getchar(); while(ch<'0'||'9'<ch) {if(ch=='-') f=-1;ch=get 阅读全文
摘要:
AC自动机 其实是trie树的改图。每次状态转移在末尾增添一个字符。 其使用失配指针 \(fail\) 指向自动机中自己的最长后缀,以达到多模匹配的效果。 模板题 代码: 其实也不多说了,就是trie加一个fail指针。 其中fail指针如何求?我们遍历全图,当遍历到一条链的第二个点时,我们在初始状 阅读全文
摘要:
简单说一下,首先我们类似扩展KMP一样的维护右端点最右的区间。我们直接把当前的点放到这个最右区间内翻转,直接用这个翻转的位置更新回文长度,然后由于不能保证区间外的回文性,于是取个min,具体看代码。 然后为了统一处理奇偶回文,我们在字符直接以及字符串开头结尾添加 # ,代表空。那么对于一个偶数 \( 阅读全文
摘要:
由于算法基于随机,不适宜作为题目正解,但在参数调得好的时候可以得到较高分数甚至AC,用于实在迫于无奈时的算法或暴力算法范围外的骗分算法 典型的邪教算法(我就喜欢邪教的) 基本思想是随机转移,从而确定最优解,大多数用于计算几何(但其实你如果够牛也可以在其他情况下用来骗分) 基本的实现步骤是: 1.取一 阅读全文