Submission #220227

#TimeUsernameProblemLanguageResultExecution timeMemory
220227kostia244Palindromes (APIO14_palindrome)C++17
100 / 100
97 ms95648 KiB
#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 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...