만드는 중입니다

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

수식 채굴

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

요약
주어진 수식 문자열에서 문법에 맞고 값이 n인 부분 문자열의 개수를 셉니다.
난이도

보통10점 중 7점

유형
스택, 동적 계획법, 해시맵
정답자
아직 제출이 없습니다

문제

다음 문법 규칙으로 정의되는, 시작 기호가 EE인 산술 식을 생각하자. 산술 식은 한 자리 양의 정수, 덧셈 기호 +, 곱셈 기호 *, 괄호 (, )로 만들어진다.

E ::= T | E '+' T
T ::= F | T '*' F
F ::= '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '(' E ')'

이런 산술 식을 문자열로 볼 때, 그 부분 문자열(연속된 문자들의 나열)도 다시 산술 식이 될 수 있다. 정수 nn과 산술 식을 나타내는 문자열 ss가 주어질 때, 산술 식으로 읽을 수 있고 계산한 값이 nn인 ss의 부분 문자열의 개수를 구하라.

입력

입력은 여러 데이터셋으로 이루어지며, 각 데이터셋은 다음 형식이다.

첫 줄에 목표 값 nn이 주어진다. 1≤n≤1091 \le n \le 10^9이다. 둘째 줄에 문자열 ss가 주어진다. ss는 위 문법을 따르는 산술 식이다. ss의 길이는 2×1062 \times 10^6을 넘지 않고, ss에 나오는 괄호의 중첩 깊이는 최대 1000이다. 입력의 끝은 0 한 줄로 표시된다. 모든 데이터셋에 걸친 ss 길이의 합은 5×1065 \times 10^6을 넘지 않는다.

출력

각 데이터셋마다 한 줄에 ss의 부분 문자열 중 위 문법을 따르고 값이 nn인 것의 개수를 출력한다. 같은 문자열이라도 위치가 다르면 따로 센다.

예제1

  1. 예제 1

    입력
    3
    (1+2)*3+3
    2
    1*1*1+1*1*1
    587
    1*(2*3*4)+5+((6+7*8))*(9)
    0
    
    예상 출력
    4
    9
    2