시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 89 17 10 29.412%

문제

알파벳 소문자로만 이루어진 문자열이 주어진다. 부분문자열의 "등장값" 이란 그 부분문자열이 등장하는 횟수와 부분문자열의 길이를 곱한 값이다. 문자열이 주어졌을 때, 팰린드롬이면서 가장 큰 등장값을 가지는 부분문자열을 구하는 프로그램을 작성하시오.

입력

첫재 줄에 알파벳 소문자(a-z)로만 이루어진 문자열이 주어진다. 문자열의 길이는 300,000보다 작거나 같다.

출력

첫째 줄에 팰린드롬인 부분문자열 중에서 가장 큰 등장값을 출력한다.

예제 입력

abacaba

예제 출력

7

힌트

문자열 s의 길이를 |s|로 나타내자.

문자열 s1s2...s|s|의 부분문자열이란 1 ≤ i ≤ j ≤ |s|를 만족하는 비어있지 않은 문자열 sisi+1...sj이다. 문자열 그 자체도 부분문자열에 포함된다.

왼쪽부터 오른쪽 순서로 읽었을 때와 오른쪽부터 왼쪽 순서로 읽었을 때가 같은 문자열을 팰린드롬이라고 한다.

예제의 경우에는 총 7개의 팰린드롬 부분문자열이 있다. a, b, c, aba, aca, bacab, abacaba.

  • a는 총 4번 등장하기 때문에, 등장값은 4 × 1 = 4
  • b는 총 2번 등장하기 때문에, 등장값은 2 × 1 = 2
  • c는 총 1번 등장하기 때문에, 등장값은 1 × 1 = 1
  • aba는 총 2번 등장하기 때문에, 등장값은 2 × 3 = 6
  • aca는 총 1번 등장하기 때문에, 등장값은 1 × 3 = 3
  • bacab는 총 1번 등장하기 때문에, 등장값은 1 × 5 = 5
  • abacaba는 총 1번 등장하기 때문에, 등장값은 1 × 7 = 7

가장 큰 등장값을 가지는 팰린드롬 부분문자열은 abacab이고, 등장값은 7이다.

출처

Olympiad > Asia-Pacific Informatics Olympiad > APIO 2014 1번