Submission #444031

#TimeUsernameProblemLanguageResultExecution timeMemory
444031Killer2501Palindromes (APIO14_palindrome)C++14
100 / 100
80 ms71244 KiB
#include<bits/stdc++.h> #define fi first #define se second #define pb push_back using namespace std; using ll = int; using pll = pair<ll, ll>; const int N = 3e5+5; const int mod = 1e9+7; int n, m, k, now, suff; long long ans; string s; struct node { ll num, len, slink, nxt[26]; vector<ll> e; }tree[N]; void init() { now = suff = 2; tree[1].len = -1; tree[1].slink = 1; tree[1].e.pb(2); tree[2].len = 0; tree[2].slink = 1; } void add(int pos) { int c = s[pos] - 'a'; int cur = suff, curlen = 0; while(true) { curlen = tree[cur].len; if(pos-curlen-1 >= 0 && s[pos-curlen-1] == s[pos])break; cur = tree[cur].slink; } if(tree[cur].nxt[c]) { suff = tree[cur].nxt[c]; ++tree[suff].num; return; } ++now; suff = now; tree[now].len = tree[cur].len + 2; tree[now].num = 1; tree[cur].nxt[c] = now; if(tree[now].len == 1) { tree[2].e.pb(now); tree[now].slink = 2; return; } while(true) { cur = tree[cur].slink; curlen = tree[cur].len; if(pos-curlen-1 >= 0 && s[pos-curlen-1] == s[pos])break; } tree[now].slink = tree[cur].nxt[c]; tree[tree[now].slink].e.pb(now); } void dfs(ll u) { for(ll v : tree[u].e) { dfs(v); tree[u].num += tree[v].num; } ans = max(ans, 1ll*tree[u].num * tree[u].len); } void sol() { cin >> s; init(); for(int i = 0; i < s.length(); i ++)add(i); dfs(1); cout << ans; } int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); sol(); }

Compilation message (stderr)

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