![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
——字符串处理
NOI_yzk
我爱oi oi爱我
展开
-
字符串hash
字符串hash可以快速判断出两字符串是否相同要提供一个base(质数) unsigned long long 来自然溢出 还要存每一位的base主要代码实现如下#define Base 233#define ull unsigned long long char A[M];ull p[M],Hash[M];void Hash(n){ p[0]=1; FOR(i,1,n)p原创 2017-10-10 08:32:20 · 320 阅读 · 0 评论 -
LCP 最长公共前缀
定义dp[i][j]为从n到i点及j点的最长匹配长度 状态转移方程为if(str[i]==str[j])dp[i][j]=dp[i+1][j+1]+1else dp[i][j]=0循环顺序for(int i=n;i>0;i--){ for(int j=n;j>0;j--){ }}这种算法可以快速地O(1)求出两个子串的匹配长度 可以运用于dp的优化原创 2017-11-03 18:10:58 · 920 阅读 · 0 评论 -
Trie树
一种用于检索的数据结构 大致就是开一个数组,记录节点 然后记录经过这个节点的字符串个数,以及这个节点表示的字符串个数 分别用pre pass end记录 复杂度大约为len∗mlen*mm为操作数,len为字符串长度 复杂度很小,但内存会比较大 代码实现如下:struct Trie_Tree{ static const int M=3000005; int pre[M][原创 2017-11-28 20:58:25 · 237 阅读 · 0 评论 -
AC自动机
一个自动AC的东西... 套用KMP的fail指针,然后再是利用字典树进行字典与文章的匹配 以下是模板#include<bits/stdc++.h>using namespace std;#define FOR(i,x,y) for(int i=(x),i##_end_=(y);i<=i##_end_;i++)#define DOR(i,x,y) for(int i=(x),i##_end原创 2017-12-08 18:57:32 · 209 阅读 · 0 评论