Submission #1166197

#TimeUsernameProblemLanguageResultExecution timeMemory
1166197MuhammetPalindromes (APIO14_palindrome)C++20
0 / 100
0 ms328 KiB
#include "bits/stdc++.h"

using namespace std;

#define ll long long
#define SZ(s) (ll)s.size()

int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr);

    string s;
    cin >> s;
    int n = SZ(s);
    ll ans = 1;
    vector <pair <int, int>> vk;
    vector <vector <pair <int, int>>> v, v1;
    for(int c = 'a'; c <= 'z'; c++) {
        v.clear();
        v.resize(1);
        for(int i = 0; i < n; i++) {
            if(s[i] == char(c)) v[0].push_back({i, i});
        }
        v1.clear();
        // cout << char (c) << '\n';
        ll cnt = 1;
        vector <int> vis(27);
        while(SZ(v)) {
            v1.clear();
            // cout << cnt << '\n';
            for(auto vv : v) {
                // cout << SZ(vv) << ' ';
                ans = max(ans, cnt * SZ(vv));
                int nd = -1;
                for(int i = 0; i < 26; i++) {
                	vis[i] = -1;
                }
                for(auto [l, r] : vv) {
                    if(l == 0 or r == n-1) continue;
                    if(s[--l] != s[++r]) continue;
                    if(vis[s[l]-'a'] == -1) {
                        vk = {{l, r}};
                        v1.push_back(vk);
                        vis[s[l]-'a'] = ++nd;
                    }
                    else {
                        v1[vis[s[l]-'a']].push_back({l, r});
                    }
                }
            }
            v = v1;
            cnt += 2;
            // cout << '\n';
        }
    }
    for(int c = 'a'; c <= 'z'; c++) {
        v.clear();
        v.resize(1);
        for(int i = 0; i < n-1; i++) {
            if(s[i] == char(c) and s[i+1] == char(c)) v[0].push_back({i, i+1});
        }
        // cout << char (c) << '\n';
        v1.clear();
        ll cnt = 2;
        vector <int> vis(27);
        while(SZ(v)) {
            v1.clear();
            // cout << cnt << '\n';
            for(auto vv : v) {
                // cout << SZ(vv) << ' ';
                ans = max(ans, cnt * SZ(vv));
                int nd = -1;
                for(int i = 0; i < 26; i++) {
                	vis[i] = -1;
                }
                for(auto [l, r] : vv) {
                    if(l == 0 or r == n-1) continue;
                    if(s[--l] != s[++r]) continue;
                    if(vis[s[l]-'a'] == -1) {
                        vk = {{l, r}};
                        v1.push_back(vk);
                        vis[s[l]-'a'] = ++nd;
                    }
                    else {
                        v1[vis[s[l]-'a']].push_back({l, r});
                    }
                }
            }
            v = v1;
            cnt += 2;
            // cout << '\n';
        }
    }

    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...