This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub AlexanderNekrasov/Youthful-Passion-Fruit-teambook
/**
* Author: Iurii Pustovalov
* Date: 2022-11-08
* Description: Creates Eertree of string str
* Time: O(n)
*/
struct eertree {
int len[MAXN], suffLink[MAXN];
int to[MAXN][26];
int numV, v;
void addLetter(int n, string &str) {
while (str[n - len[v] - 1] != str[n])
v = suffLink[v];
int u = suffLink[v];
while (str[n - len[u] - 1] != str[n])
u = suffLink[u];
int u_ = to[u][str[n] - 'a'];
int v_ = to[v][str[n] - 'a'];
if (v_ == -1) {
v_ = to[v][str[n] - 'a'] = numV;
len[numV++] = len[v] + 2;
suffLink[v_] = u_;
}
v = v_;
}
void init() {
len[0] = -1;
len[1] = 0;
suffLink[1] = 0;
suffLink[0] = 0;
numV = 2;
for (int i = 0; i < 26; ++i) {
to[0][i] = numV++;
suffLink[numV - 1] = 1;
len[numV - 1] = 1;
}
v = 0;
}
void init(int sz) {
for (int i = 0; i < sz; ++i) {
len[i] = suffLink[i] = 0;
for (int j = 0; j < 26; ++j)
to[i][j] = -1;
}
}
};
#line 1 "strings/Eertree.cpp"
/**
* Author: Iurii Pustovalov
* Date: 2022-11-08
* Description: Creates Eertree of string str
* Time: O(n)
*/
struct eertree {
int len[MAXN], suffLink[MAXN];
int to[MAXN][26];
int numV, v;
void addLetter(int n, string &str) {
while (str[n - len[v] - 1] != str[n])
v = suffLink[v];
int u = suffLink[v];
while (str[n - len[u] - 1] != str[n])
u = suffLink[u];
int u_ = to[u][str[n] - 'a'];
int v_ = to[v][str[n] - 'a'];
if (v_ == -1) {
v_ = to[v][str[n] - 'a'] = numV;
len[numV++] = len[v] + 2;
suffLink[v_] = u_;
}
v = v_;
}
void init() {
len[0] = -1;
len[1] = 0;
suffLink[1] = 0;
suffLink[0] = 0;
numV = 2;
for (int i = 0; i < 26; ++i) {
to[0][i] = numV++;
suffLink[numV - 1] = 1;
len[numV - 1] = 1;
}
v = 0;
}
void init(int sz) {
for (int i = 0; i < sz; ++i) {
len[i] = suffLink[i] = 0;
for (int j = 0; j < 26; ++j)
to[i][j] = -1;
}
}
};