Submission #1166397

#TimeUsernameProblemLanguageResultExecution timeMemory
1166397MuhammetPalindromes (APIO14_palindrome)C++20
47 / 100
1093 ms2288 KiB
#include "bits/stdc++.h"

using namespace std;

#define ll long long
#define SZ(s) (ll)s.size()
#define ff first
#define ss second

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();
        ll cnt = 1;
        vector <int> vis(27);
        while(SZ(v)) {
            int nd = -1;
            for(int vi = 0; vi < SZ(v); vi++) {
                vector < pair <int, int>> vv = v[vi];
                ans = max(ans, cnt * SZ(vv));
                vis.assign(26, -1);
                for(auto [l, r] : vv) {
                    if(l == 0 or r == n-1) continue;
                    if(s[--l] != s[++r]) continue;
                    if(vis[int(s[l]-'a')] == -1) {
                        vk = {{l, r}};
                        v1.push_back(vk);
                        vis[int(s[l]-'a')] = ++nd;
                    }
                    else {
                        v1[vis[int(s[l]-'a')]].push_back({l, r});
                    }
                }
            }
            v.clear();
            v = v1;
            v1.clear();
            cnt += 2;
        }
    }
    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});
        }
        v1.clear();
        ll cnt = 2;
        vector <int> vis(27);
        while(SZ(v)) {
            int nd = -1;
            for(auto vv : v) {
                ans = max(ans, cnt * SZ(vv));
                vis.assign(26, -1);
                for(auto [l, r] : vv) {
                    if(l == 0 or r == n-1) continue;
                    if(s[--l] != s[++r]) continue;
                    if(vis[int(s[l]-'a')] == -1) {
                        vk = {{l, r}};
                        v1.push_back(vk);
                        vis[int(s[l]-'a')] = ++nd;
                    }
                    else {
                        v1[vis[int(s[l]-'a')]].push_back({l, r});
                    }
                }
            }
            v.clear();
            v = v1;
            v1.clear();
            cnt += 2;
        }
    }

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