摘要:
前置知识 整除分块 把之前写的博客搬过来了 模型 求 \(\large\sum^{n}_ {i=1} \lfloor{\frac{n}{i}}\rfloor\) 假设 \(n\) 等于 10,我们可以列出下表: \(\ i\) 1 2 3 4 5 6 7 8 9 10 \(\frac{10}{i}\ 阅读全文
摘要:
初始化? 给定一个字符串,求其最长回文串,比如: aababa,最长回文长度为 3,是ababa; abbabb,最长回文长度为 2,是abba; 以上两个回文串有奇回文和偶回文,这样处理比较繁琐,需要我们进行分类讨论。 所以我们第一步就是先将字符串统一处理为奇回文。 也就是将每两个字符串之间插入一 阅读全文
摘要:
前言 AC自动机(\(Aho\ Corasick\ Atomaton\))有着一种 \(KMP\) 的思想,所以在学习之前建议先学一下 \(KMP\)。同时还需要了解一下 \(Trie\) 树(建议去看一下 oi-wiki 上的字典树) 问题描述 给定一个字符串 \(S\) 和 \(n\) 模式串, 阅读全文
摘要:
算法基础 贪心 线性基 小技巧 基数排序 数学 数论分块 一些定理 欧几里得定理 裴蜀定理 乘法逆元 素数 Miller_rabin 字符串 SA 后缀数组 LCP 与 height 基数排序 最小表示法 KMP 字符串匹配 Lyndon 分解 AC自动机 manacher算法 图论 最小生成树 \ 阅读全文
摘要:
概念 定义:给定数集 \(S\),以异或运算张成的数集与 \(S\) 相同的极大线性无关集,称为原数集的一个线性基。 简单地说,线性基是一个数的集合。每个序列都拥有至少一个线性基。取线性基中若干个数异或起来可以得到原序列中的任何一个数。 性质 性质一 取线性基中若干个数异或起来可以得到原序列中的任何 阅读全文
摘要:
Miller_rabin 素数测试 一种用来判断素数的算法。 前置芝士 威尔逊定理 若 \(p\) 为素数,\((p-1)! \equiv -1 (\mod p)\)。 证明: 充分性证明: 如果 \(p\) 不是素数,那么他的因数必定存在于$ 1,2,3,\dots,p−1$ 之中,所以 \(\g 阅读全文
摘要:
最近又有个奇奇怪怪的题目,数据为 \(n \le 1 \times 10^7\),并且还要用到排序,普通的排序肯定会超时,然后就发现了一种 \(O(n)\) 介绍 基数排序(Radix Sort)是桶排序的扩展,它是将整数按位数切割成不同的数字,然后按每个数位分别比较以此来排序。 说详细点,也就是将 阅读全文
摘要:
前言 阅读此篇前,可先阅读后缀数组 LCP LCP 就是最长公共前缀,在后缀数组中,\(LCP(i,j)\) 就代表从 \(sa_i\) 开始的后缀和从 \(sa_j\) 开始的后缀的最长公共前缀。 height 的定义 \(height[i]=LCP(sa[i],sa[i-1])\),即从 \(i 阅读全文
摘要:
什么是后缀数组 后缀数组主要是用来处理字符串的,分为两种方法:倍增法以及 DC3,但由于倍增法通俗易懂,码量小,常数小,所以今天这篇文章我就只介绍倍增法(不可能是因为我不会 DC3) 前缀知识 No.1 基数排序 基数排序讲解 毕竟sort排序需要 \(O(nlog\ n)\),所以并不适合后缀数组 阅读全文
摘要:
Treap 是一种二叉平衡树,而 Treap = BST + Heap。 但普通的 Treap 每次都要旋来旋去的,泰麻饭啦!于是出现了 fhq_treap,也就是无旋 treap。 fhq_treap 整体是拥有二叉搜索树的性质,但是它的每一个节点都会有一个附加权值,它的附加权值是符合堆的性质。附 阅读全文
摘要:
前言 也许在看这篇文章之前,你可以看看这篇文章? 前置知识:\(kruskal\) 求最小生成树,并查集…… 算法介绍 问题引入 两个点之间的所有简单路径上最大边权的最小值。 我们定义 \(u\to v\) 路径的瓶颈为,路径上的边权最大值。 那么下图的瓶颈就为 4: 同时一条路径也可能有多个瓶颈, 阅读全文
摘要:
模型 求 \(\large\sum^{n}_ {i=1} \lfloor{\frac{n}{i}}\rfloor\) 假设 \(n\) 等于 10,我们可以列出下表: \(\ i\) 1 2 3 4 5 6 7 8 9 10 \(\frac{10}{i}\) 10 5 3 2 2 1 1 1 1 1 阅读全文
摘要:
算法 阅读此篇前可先阅读欧几里得算法。 给定 \(a,b,s\),求 \(ax+by=s\) 的任意一组解。 证明: 由裴蜀定理得:二元一次方程 \(ax+by=c\) 的有解条件是 \(\gcd(a,b) \mid c\)。 由欧几里得算法得知 \(\gcd(a,b)=\gcd(b,a\mod b 阅读全文
摘要:
### 什么是 $Lyndon$ 串 我们定义一个串是 $Lyndon$ 串,当且仅当这个串的**最小后缀**就是这个串本身。 也就是说 $Lyndon$ 串等价于这个串是它的所有循环表示中**字典序最小**的。 ### $Lyndon$ 分解定义 将一个字符串 $S$ 分解为若干个子串:$s_1s 阅读全文
摘要:
前言 最近才发现自己写了后缀数组,但并没有其他的字符串算法,今天先把 \(KMP\) 字符串匹配先讲一下。 算法核心 对于字符串匹配,最朴素的方法就是一个字符一个字符地匹配,找到不同的就直接换一个地方匹配。 我们先来看一组样例: \(ababababe\) \(ababe\) 对于这组样例,暴力的方 阅读全文
摘要:
定义 一个字符串 \(S\) 的最小表示法为该字符串所有循环同构字符串中字典序最小的一个。 比如:\(abca\),对于他,循环同构字符串就有 \(aabc\),\(caab\),\(bcaa\),其中字典序最小的是 \(aabc\)。那么我们说 \(aabc\) 就是 \(abca\) 最小表示法 阅读全文