하이터치☆메모리

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

요약
두 괄호 문자열 A, B의 접두사 길이 쌍 (i, j) 중에서 A의 i-접두사와 B의 j-접두사를 이어붙인 문자열이 올바른 괄호 문자열이 되는 쌍의 개수를 센다.
난이도

보통10점 중 7점

유형
누적 합, 문자열, 조합론, 수학
정답자
아직 제출이 없습니다

문제

(와 )만으로 이루어진 문자열을 괄호 문자열이라 한다. 그 중에서도 올바른 괄호 문자열은 다음과 같이 정의된다.

  1. 빈 문자열은 올바른 괄호 문자열이다.
  2. 문자열 SS가 올바른 괄호 문자열일 때, SS를 (와 )로 감싼 문자열 (S)(S)도 올바른 괄호 문자열이다.
  3. 문자열 SS와 TT가 올바른 괄호 문자열일 때, 이 두 문자열을 이어붙인 문자열 S+TS+T도 올바른 괄호 문자열이다.

올바른 괄호 문자열의 예시로는 ()()(), (()), ()(())()()이 있다.

문자열 SS의 접두사는 SS의 첫번째 원소를 포함하는 SS의 부분 문자열을 의미한다. abcd의 접두사로는 a, ab, abc, abcd가 있다. 빈 문자열은 접두사가 될 수 없음에 유의하라.

두 괄호 문자열 AA, BB에 대해, AA의 길이 i,(1≤i≤∣A∣)i\\,(1\leq i\leq |A|)의 접두사를 a_ia\_i, BB의 길이 j,(1≤j≤∣B∣)j\\,(1\leq j\leq |B|)의 접두사를 b_jb\_j라 할 때 a_ia\_i와 b_jb\_j를 이어붙인 문자열 a_i+b_ja\_i+b\_j가 올바른 괄호 문자열인 순서쌍 (i,j)(i,j)를 하이터치☆메모리라고 한다. 하이터치☆메모리의 개수를 구해보자.

입력

첫째 줄에 괄호 문자열 AA가 주어진다.

둘째 줄에 괄호 문자열 BB가 주어진다.

출력

첫째 줄에 하이터치☆메모리의 개수를 출력한다.

제한

  • 1≤∣A∣≤200,0001\leq |A|\leq 200\\, 000
  • 1≤∣B∣≤200,0001\leq |B|\leq 200\\, 000

힌트

정답이 32비트 정수 범위를 넘을 수 있으므로, C/C++에서는 long long, Java에서는 long과 같은 자료형을 사용하는 것을 권장한다.

예제2

  1. 예제 1

    입력
    (()
    ))(
    
    예상 출력
    3
    
  2. 예제 2

    입력
    ()()
    ()(())
    
    예상 출력
    4