제출 #1326783

#제출 시각아이디문제언어결과실행 시간메모리
1326783goats_9회문 (APIO14_palindrome)C++20
100 / 100
52 ms54372 KiB
/* Author: goats_9 */ #include <bits/stdc++.h> using namespace std; using ll = long long; struct eertree { enum { K = 26, A = 'a' }; struct Node { vector<int> nxt = vector<int> (K, -1); ll len = 0, cnt = 0; int suf = 0; Node() = default; }; vector<Node> tree; eertree() : tree(2, Node()) { tree[0].len = -1; } eertree(string s) : eertree() { int p = 1, n = (int)s.size(); for (int i = 0; i < n; i++) { while (i <= tree[p].len || s[i] != s[i - tree[p].len - 1]) p = tree[p].suf; if (tree[p].nxt[s[i] - A] == -1) { tree[p].nxt[s[i] - A] = (int)tree.size(); tree.push_back(Node()); tree.back().len = tree[p].len + 2; } int q = tree[p].nxt[s[i] - A]; if (tree[q].len == 1) { tree[q].suf = 1; tree[q].cnt++; p = q; continue; } p = tree[p].suf; while (i <= tree[p].len || s[i] != s[i - tree[p].len - 1]) p = tree[p].suf; tree[q].suf = tree[p].nxt[s[i] - A]; tree[q].cnt++; p = q; } for (int i = (int)tree.size() - 1; i >= 0; i--) tree[tree[i].suf].cnt += tree[i].cnt; } }; int main() { string s; cin >> s; eertree tr(s); ll ans = 0; for (auto u : tr.tree) ans = max(ans, u.len * u.cnt); cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...