Submission #163108

#TimeUsernameProblemLanguageResultExecution timeMemory
163108combi1k1Palindromes (APIO14_palindrome)C++14
100 / 100
109 ms41052 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define mci map<char,int> const int N = 6e5 + 1; int cur = 0; int tot = 0; vector<mci> nxt; vector<int> len; vector<int> link; void NewNode() { nxt.pb({}); len.pb(0); link.pb(0); } int cnt[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); string s; cin >> s; NewNode(); ++tot; NewNode(); ++tot; len[0] = -1; for(int i = 0 ; i < s.size() ; ++i) { while (1) { if(i > len[cur] && s[i - len[cur] - 1] == s[i]) break; cur = link[cur]; } if (nxt[cur].count(s[i])) { cur = nxt[cur][s[i]]; cnt[cur]++; continue; } NewNode(); nxt[cur][s[i]] = tot; len[tot] = len[cur] + 2; cnt[tot] = 1; if (len[tot] == 1) { link[tot] = 1; cur = tot++; continue; } while (1) { cur = link[cur]; if (i > len[cur] && s[i - len[cur] - 1] == s[i]) { link[tot] = nxt[cur][s[i]]; break; } } cur = tot++; } vector<int> vec(tot - 1); iota(vec.begin(),vec.end(),1); sort(vec.begin(),vec.end(),[&](int x,int y) { return len[x] > len[y]; }); long long ans = 0; for(int x : vec) cnt[link[x]] += cnt[x], ans = max(ans,1ll * cnt[x] * len[x]); cout << ans << endl; }

Compilation message (stderr)

palindrome.cpp: In function 'int main()':
palindrome.cpp:36:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0 ; i < s.size() ; ++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...