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

Code

class manacher:

    def __init__(self, s):

        self.ms = "@"
        for c in s:
            self.ms += "#" + c
        self.ms += "#$"
        self.p = [0] * len(self.ms)
        self.runManacher()

    def runManacher(self):
        n = len(self.ms)
        l = r = 0

        for i in range(1, n - 1):
            mirror = l + r - i
            if 0 <= mirror < n:
                self.p[i] = max(0, min(r - i, self.p[mirror]))
            else:
                self.p[i] = 0


            while (i + 1 + self.p[i] < n and
                   i - 1 - self.p[i] >= 0 and
                   self.ms[i + 1 + self.p[i]] == self.ms[i - 1 - self.p[i]]):
                self.p[i] += 1

  
            if i + self.p[i] > r:
                l = i - self.p[i]
                r = i + self.p[i]


    def getLongest(self, cen, odd):
        pos = 2 * cen + 2 + (0 if odd else 1)
        return self.p[pos]


    def check(self, l, r):
        length = r - l + 1
        return length <= self.getLongest((l + r) // 2, length % 2)


def getLongestPal(s):
    n = len(s)
    maxLen = 1
    start = 0
    M = manacher(s)

    for i in range(n):
        oddLen = M.getLongest(i, 1)
        if oddLen > maxLen:
            start = i - (oddLen - 1) // 2

        evenLen = M.getLongest(i, 0)
        if evenLen > maxLen:
            start = i - (evenLen - 1) // 2

        maxLen = max(maxLen, max(oddLen, evenLen))

    return s[start:start + maxLen]


if __name__ == "__main__":
    s = input()
    print(getLongestPal(s))

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:

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
(empty)

Test 4

Verdict:

input
ababababababababababababababab...

correct output
ababababababababababababababab...

user output
(empty)

Test 5

Verdict:

input
aztdvxzjwxtrludymvpradgbdpgnrq...

correct output
aztdvxzjwxtrludymvpradgbdpgnrq...

user output
(empty)

Test 6

Verdict:

input
vvfigwwsyxbukedgcfyibvtbclybud...

correct output
vvfigwwsyxbukedgcfyibvtbclybud...

user output
(empty)

Test 7

Verdict:

input
abaabaaaaaaabaababbbbbbabaaabb...

correct output
babbbabbbaabbbbaabbbbbbbbaabbb...

user output
(empty)

Test 8

Verdict:

input
txolestmgyepwrpofxyesjtsfkhjac...

correct output
yxnbaabnxy

user output
(empty)

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:

input
aabbabaabbaababbabaababbaabbab...

correct output
abaababbaabbabaababbabaabbaaba...

user output
(empty)

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:

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
(empty)