만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

파레이돌리아

시간 제한4초메모리 제한1024 MB

요약
소문자로 이루어진 길이 30만 이하의 문자열 t가 주어질 때, t의 모든 부분 문자열 s마다 "bessie"를 부분 수열로 몇 번 만들 수 있는지 B(s)를 구하고 그 합을 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 문자열 매칭, 투 포인터
정답자
아직 제출이 없습니다

문제

파레이돌리아는 실제로는 없는 곳에서 익숙한 무늬를 보는 현상이다. 구름에서 얼굴을 보는 것이 그 예이다. 존 농부는 소와 늘 가까이 지내서, 일상의 사물에서도 소와 관련된 무늬를 자주 본다. 예를 들어 문자열 "bqessiyexbesszieb"를 보면, 눈이 일부 글자를 무시해서 "bessiebessie"로 보인다.

문자열 ss가 주어졌을 때, B(s)B(s)는 ss에서 0개 이상의 문자를 지워서 "bessie"를 최대 몇 번 반복해서 만들 수 있는지를 나타낸다. 위 예에서 B("bqessiyexbesszieb")=2B("bqessiyexbesszieb") = 2이다.

존 농부는 이보다 더 흥미로운 문제를 풀고 싶어 한다. 길이가 최대 3⋅1053\cdot 10^5이고 영문 소문자로만 이루어진 문자열 tt가 주어졌을 때, tt의 모든 연속 부분 문자열 ss에 대한 B(s)B(s)의 합을 구하시오.

입력

입력은 길이가 최대 3⋅1053\cdot 10^5인 비어 있지 않은 문자열이며, 모든 문자는 영문 소문자이다.

출력

한 개의 수를 출력한다. 이 수는 입력 문자열의 모든 연속 부분 문자열에서 만들 수 있는 bessie의 총 개수이다.

예제2

  1. 예제 1

    입력
    bessiebessie
    
    예상 출력
    14
    
  2. 예제 2

    입력
    abcdefghssijebessie
    
    예상 출력
    28