아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

촘스키 정규형 문법

시간 제한5초메모리 제한256 MB

요약
시작 기호 S에서 출발하는 촘스키 정규형 문법이 최대 1000자의 소문자 문자열을 도출하는지 판정합니다.
난이도

보통10점 중 5점

유형
동적 계획법, 구간
정답자
아직 제출이 없습니다

문제

문맥 자유 문법이 촘스키 정규형(CNF)으로 주어진다. 이 문법은 다음으로 이루어진다.

  • 비단말 기호의 집합 NN
  • 단말 기호의 집합 TT
  • NN에 속하는 시작 기호 SS
  • A→BCA \to BC 또는 A→aA \to a 꼴의 규칙 집합 RR (A,B,C∈NA, B, C \in N, a∈Ta \in T)

A∈NA \in N에 대해 AA가 생성하는 언어 L(A)L(A)를 다음과 같이 정의한다.

L(A)={ wz∣w∈L(B), z∈L(C), A→BC∈R }∪{ a∣A→a∈R }L(A) = \{\,wz \mid w \in L(B),\ z \in L(C),\ A \to BC \in R\,\} \cup \{\,a \mid A \to a \in R\,\}

문법이 생성하는 언어는 시작 기호의 언어 L(S)L(S)이다. 문자열 xx가 주어지면 xx가 L(S)L(S)에 속하는지 판정하라.

입력

첫째 줄에 문자열 xx가 주어진다. xx는 알파벳 소문자로만 이루어지고 길이는 1 이상 1000 이하이다.

둘째 줄부터 파일의 끝까지 문법 규칙이 한 줄에 하나씩 주어진다. 비단말 기호는 알파벳 대문자로, 단말 기호는 알파벳 소문자로 쓴다. 길이가 3인 줄 ABC는 규칙 A→BCA \to BC를 뜻하고 길이가 2인 줄 Aa는 규칙 A→aA \to a를 뜻한다. 시작 기호는 항상 S이다. 규칙은 한 개 이상 주어지며 같은 규칙이 두 번 이상 나올 수 있다.

출력

xx가 문법이 생성하는 언어에 속하면 1을, 속하지 않으면 0을 한 줄에 출력한다.

예제4

  1. 예제 1

    입력
    a
    SAB
    Sa
    Ab
    
    예상 출력
    1
    
  2. 예제 2

    입력
    ab
    SAB
    Sa
    Ab
    
    예상 출력
    0
    
  3. 예제 3

    입력
    ab
    SAB
    Sa
    Ab
    Ba
    
    예상 출력
    0
    
  4. 예제 4

    입력
    ba
    SAB
    Sa
    Ab
    Ba
    
    예상 출력
    1