This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#pragma GCC optimize("O2")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("avx,avx2,sse,sse2,ssse3,tune=native")
#include<bits/stdc++.h>
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb push_back
using namespace std;
using ll = long long;
//using arr = array;
using pi = pair<int, int>;
using vi = vector<int>;
using vpi = vector<pi>;
using ld = long double;
//#include<bits/extc++.h>
//using namespace __gnu_pbds;
//using oset = tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>;
const int maxn = 1<<19, mod = (119<<23)+1, lg = 19;
int link[maxn], to[maxn][26], len[maxn], occ[maxn], sz, cur;
string s;
void init() {
sz = 2;
cur = 0;
memset(link, 0, sizeof link);
memset(len, 0, sizeof len);
memset(to, 0, sizeof to);
len[0] = -1;
}
int get_link(int v) {
while((int)s.size()-len[v]-2<0 || s[s.size()-len[v]-2]!=s.back()) v = link[v];
return v;
}
void add(char c) {
s += c, c -= 'a';
cur = get_link(cur);
if(!to[cur][c]) {
to[cur][c] = sz;
link[sz] = cur ? to[get_link(link[cur])][c] : 1;
len[sz] = len[cur]+2;
sz++;
}
cur = to[cur][c];
occ[cur]++;
}
vi g[maxn];
ll ans = 0;
ll dfs(int v) {
ll cnt = occ[v];
for(auto i : g[v]) {
cnt += dfs(i);
}
if(len[v] > 0) ans = max(len[v] * 1ll * cnt, ans);
return cnt;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
string s;
cin >> s;
init();
for(auto &i : s) add(i);
for(int i = 1; i < sz; i++) g[link[i]].pb(i);
dfs(0);
cout << ans << '\n';
}
Compilation message (stderr)
palindrome.cpp: In function 'void add(char)':
palindrome.cpp:37:15: warning: array subscript has type 'char' [-Wchar-subscripts]
if(!to[cur][c]) {
^
palindrome.cpp:38:12: warning: array subscript has type 'char' [-Wchar-subscripts]
to[cur][c] = sz;
^
palindrome.cpp:39:45: warning: array subscript has type 'char' [-Wchar-subscripts]
link[sz] = cur ? to[get_link(link[cur])][c] : 1;
^
palindrome.cpp:43:17: warning: array subscript has type 'char' [-Wchar-subscripts]
cur = to[cur][c];
^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |