Submission #392759

#TimeUsernameProblemLanguageResultExecution timeMemory
392759danielcm585Palindromes (APIO14_palindrome)C++14
100 / 100
82 ms73588 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second typedef long long ll; typedef pair<int,int> ii; const int N = 3e5; ll suff, num, ans; string s; struct node { int nx[26]; ll link, len, cnt; vector<int> adj; } tree[N+2]; void insert(int p) { int curSuff = suff, curLen = 0, x = s[p]-'a'; while (1) { curLen = tree[curSuff].len; if (p-1-curLen >= 0 && s[p-1-curLen] == s[p]) break; curSuff = tree[curSuff].link; } if (tree[curSuff].nx[x]) { suff = tree[curSuff].nx[x]; tree[suff].cnt++; return; } suff = ++num; tree[num].len = tree[curSuff].len+2; tree[num].cnt = 1; tree[curSuff].nx[x] = num; if (tree[num].len == 1) { tree[num].link = 2; tree[2].adj.push_back(num); return; } while (1) { curSuff = tree[curSuff].link; curLen = tree[curSuff].len; if (p-1-curLen >= 0 && s[p-1-curLen] == s[p]) { tree[num].link = tree[curSuff].nx[x]; tree[tree[curSuff].nx[x]].adj.push_back(num); break; } } } void dfs(int cur) { for (int nx : tree[cur].adj) { dfs(nx); tree[cur].cnt += tree[nx].cnt; } ans = max(ans,tree[cur].len*tree[cur].cnt); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> s; num = suff = 2; tree[1].len = -1, tree[1].link = 1; tree[2].len = 0, tree[2].link = 1; tree[1].adj.push_back(2); for (int i = 0; i < s.length(); i++) insert(i); dfs(1); cout << ans << '\n'; return 0; }

Compilation message (stderr)

palindrome.cpp: In function 'int main()':
palindrome.cpp:68:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |     for (int i = 0; i < s.length(); i++) insert(i);
      |                     ~~^~~~~~~~~~~~
#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...