Submission details
Task:Longest palindrome
Sender:aalto25j_006
Submission time:2025-11-05 17:13:57 +0200
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.07 sdetails
#4ACCEPTED0.07 sdetails
#5ACCEPTED0.07 sdetails
#6ACCEPTED0.06 sdetails
#7ACCEPTED0.07 sdetails
#8ACCEPTED0.06 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.02 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.00 sdetails
#14ACCEPTED0.00 sdetails
#15ACCEPTED0.00 sdetails
#16ACCEPTED0.03 sdetails

Code

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

#define fastio                    \
    std::ios::sync_with_stdio(0); \
    std::cin.tie(0);              \
    std::cout.tie(0);

class manacher
{
public:
    std::string ms;
    std::vector<int> p;

    manacher(const std::string &s)
    {
        ms = "@";
        for (char c : s)
        {
            ms += "#" + std::string(1, c);
        }
        ms += "#$";
        p.assign(ms.size(), 0);
        runManacher();
    }

    void runManacher()
    {
        int n = (int)ms.size();
        int l = 0, r = 0;

        for (int i = 1; i < n - 1; ++i)
        {
            int mirror = l + r - i;
            if (0 <= mirror && mirror < n)
            {
                p[i] = std::max(0, std::min(r - i, p[mirror]));
            }
            else
            {
                p[i] = 0;
            }

            while (i + 1 + p[i] < n && i - 1 - p[i] >= 0 && ms[i + 1 + p[i]] == ms[i - 1 - p[i]])
            {
                p[i]++;
            }

            if (i + p[i] > r)
            {
                l = i - p[i];
                r = i + p[i];
            }
        }
    }

    int getLongest(int cen, bool odd)
    {
        int pos = 2 * cen + 2 + (odd ? 0 : 1);
        return p[pos];
    }

    bool check(int l, int r)
    {
        int length = r - l + 1;
        return length <= getLongest((l + r) / 2, length % 2);
    }
};

std::string getLongestPal(const std::string &s)
{
    int n = (int)s.size();
    int maxLen = 1;
    int start = 0;
    manacher M(s);

    for (int i = 0; i < n; ++i)
    {
        int oddLen = M.getLongest(i, true);
        if (oddLen > maxLen)
        {
            start = i - (oddLen - 1) / 2;
        }

        int evenLen = M.getLongest(i, false);
        if (evenLen > maxLen)
        {
            start = i - (evenLen - 1) / 2;
        }

        maxLen = std::max(maxLen, std::max(oddLen, evenLen));
    }

    return s.substr(start, maxLen);
}
// g++ 615/d.cpp -o d -std=c++17
int main()
{
    fastio;
    std::string s;
    std::getline(std::cin, s);
    std::cout << getLongestPal(s) << std::endl;
    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
aaaaaaaaaa

correct output
aaaaaaaaaa

user output
aaaaaaaaaa

Test 2

Verdict: ACCEPTED

input
ababababab

correct output
ababababa

user output
ababababa

Test 3

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

Test 4

Verdict: ACCEPTED

input
ababababababababababababababab...

correct output
ababababababababababababababab...

user output
ababababababababababababababab...

Test 5

Verdict: ACCEPTED

input
aztdvxzjwxtrludymvpradgbdpgnrq...

correct output
aztdvxzjwxtrludymvpradgbdpgnrq...

user output
aztdvxzjwxtrludymvpradgbdpgnrq...

Test 6

Verdict: ACCEPTED

input
vvfigwwsyxbukedgcfyibvtbclybud...

correct output
vvfigwwsyxbukedgcfyibvtbclybud...

user output
vvfigwwsyxbukedgcfyibvtbclybud...

Test 7

Verdict: ACCEPTED

input
abaabaaaaaaabaababbbbbbabaaabb...

correct output
babbbabbbaabbbbaabbbbbbbbaabbb...

user output
babbbabbbaabbbbaabbbbbbbbaabbb...

Test 8

Verdict: ACCEPTED

input
txolestmgyepwrpofxyesjtsfkhjac...

correct output
yxnbaabnxy

user output
yxnbaabnxy

Test 9

Verdict: ACCEPTED

input
ihpohpzoffel

correct output
ff

user output
ff

Test 10

Verdict: ACCEPTED

input
flexflexvpqxierullgcfckjqflexf...

correct output
cfc

user output
cfc

Test 11

Verdict: ACCEPTED

input
aabbabaabbaababbabaababbaabbab...

correct output
abaababbaabbabaababbabaabbaaba...

user output
abaababbaabbabaababbabaabbaaba...

Test 12

Verdict: ACCEPTED

input
obsession

correct output
ses

user output
ses

Test 13

Verdict: ACCEPTED

input
abcxcbaxcba

correct output
abcxcba

user output
abcxcba

Test 14

Verdict: ACCEPTED

input
zzabc

correct output
zz

user output
zz

Test 15

Verdict: ACCEPTED

input
aaccaabbaaccaaccaabbaaccaa

correct output
aaccaabbaaccaaccaabbaaccaa

user output
aaccaabbaaccaaccaabbaaccaa

Test 16

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...