trie 樹
字典樹,用於儲存和查詢數量較大的字串。
1 #include 2 #include 3 #include 4#define maxn 500010
5using
namespace
std;
6char aa[51];7
8struct
trie
13int idx(char x)
14void insert(char *s)
24 u=ch[u][c];25}
26 val[u]=1;27
}28void check(char *s)
34 u=ch[u][c];35}
36if(val[u]==1)
37else
if(val[u]>1) cout<<"
repeat\n";
38else cout<<"
wrong\n";
39return;40
}41}trie;
4243
intmain()
50 cin>>n;
51for (int i=1;i<=n;i++)
55return0;
56 }
例題:洛谷p2580
kmp演算法
支援單個模式串匹配。
思想:用自己匹配自己。核心是next陣列。
1 #include 2 #include 3 #include 4 #include5using
namespace
std;
6string
s1, s2;
7int
len1, len2;
8int next[1001];9
10void
next_init()
18return;19
}2021void
kmp()
31return;32
}3334int
main()
例題:洛谷p3375
ac自動機
支援多模式串匹配。
思想:trie樹+kmp演算法;也可以看做模式串有多個的kmp演算法在trie樹上的實現。
1 #include 2 #include 3 #include 4 #include 5using
namespace
std;
6const
int maxn 50010
7int
tot, n;
8char s[50];9
10struct
trie
16int idx(char x)
1718
void insert(char *s)
27 u=ch[u][c];28}
29 val[u]=++tot;
30return;31
}3233void
getfail() 43}
44while (!q.empty()) 56}
57return;58
}5960void find(char *t)
70return;71
}
72}trie;
7374
75void print(int i, int
j)
manacher
最長回文串的計算。
核心思想是把已經計算過的回文部分「抄過來」。
1 #include 2 #include 3 #include4using
namespace
std;56
string
a, a1;
7int lena, p[100010];8
int maxn=0;9
10int max(int x, int y)
11int min(int x, int y)
1213
void
manacher() 24}
25for (int i=1; i<=lena; i++)
26 maxn=max(maxn,p[i]);
27 maxn--;
28return;29
}3031int
main()
39 lena<<=1;40
manacher();
41 cout<42return0;
43 }
字串hash 不屬於資料結構,但由於也與字串有關,也放在這裡。使用bkdrhash和aphash
1 #include 2 #include 3 #include 4using
namespace
std;
56 unsigned int bkdrhash(char *str)
1314
15int
aphash1()
**出處 bkdrhash & aphash1
aphash2
資料結構模板 棧
此部落格是存的是我自己編寫的棧模板,如有錯誤請指出棧是操作受限的線性表,只允許在棧頂進行插入和刪除操作,遵循 後進先出 原則。include include define elemtype int define maxsize 1000 using namespace std 這是順序棧的模板 ty...
資料結構模板 佇列
此部落格是存的是我自己編寫的佇列模板,如有錯誤請指出佇列是操作受限的線性表,只允許在隊頭進行刪除操作,在隊尾進行插入操作,遵循 先進先出 原則。順序隊 存在假溢位問題 include include define elemtype int define maxsize 1000 using name...
資料結構模板合集
線段樹lazy操作模板 區間修改,區間查詢 class segment tree lazy inline void add int p,int v,int t inline void pushdown int p,int l,int r public inline void build tree i...