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

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

L-시스템 부분 문자열

시간 제한1초메모리 제한128 MB

요약
알파벳 {a,b} 위의 D0L 시스템과 질의 문자열 z가 주어질 때, 시작 문자열에서 유도되는 어떤 문자열이 z를 연속 부분 문자열로 포함하는지 판정한다.
난이도

어려움10점 중 8점

유형
문자열, 시뮬레이션, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

D0L 시스템(상호작용이 없는 결정론적 린덴마이어 시스템)은 유한한 알파벳 Σ\Sigma, 유한한 생성 규칙 집합 PP, 그리고 시작 문자열 ww로 이루어진다. 각 생성 규칙은 x→ux \to u 꼴이며, 여기서 x∈Σx \in \Sigma이고 u∈Σ+u \in \Sigma^{+}(Σ\Sigma의 기호로 이루어진 비어 있지 않은 문자열)이다. 모든 기호 x∈Σx \in \Sigma에 대해 왼쪽이 xx인 규칙이 PP 안에 정확히 하나 존재한다.

직접 유도는 문자열의 모든 기호를 각 기호에 대응하는 규칙의 오른쪽 문자열로 동시에 치환하여 새 문자열을 만드는 것이다. 이 시스템의 언어는 시작 문자열 ww에서 직접 유도를 0번 이상 적용하여 얻을 수 있는 모든 문자열의 집합이다(따라서 ww 자신도 언어에 속한다).

이 문제에서 알파벳은 Σ={a,b}\Sigma = \{a, b\}이므로 규칙은 정확히 두 개, a→ua \to u와 b→vb \to v이며 u,v∈{a,b}+u, v \in \{a, b\}^{+}이고 시작 문자열은 w∈{a,b}+w \in \{a, b\}^{+}이다.

문자열 zz가 주어질 때, 언어 안에 x z yx\,z\,y (x,y∈{a,b}∗x, y \in \{a, b\}^{*}) 꼴의 문자열이 하나라도 존재하는지, 즉 zz가 언어에 속한 어떤 문자열의 (연속된) 부분 문자열로 나타나는지 판정하여라.

입력

입력은 여러 개의 블록으로 이루어지며 파일의 끝에서 종료된다. 연속한 두 블록 사이에 빈 줄은 없다. 각 블록은 정확히 네 줄로 이루어진다.

  1. 규칙 a→ua \to u의 오른쪽 문자열 uu
  2. 규칙 b→vb \to v의 오른쪽 문자열 vv
  3. 시작 문자열 ww
  4. 질의 문자열 zz

이 네 문자열은 모두 비어 있지 않고, 문자 aa와 bb만으로 이루어지며, 길이는 최대 1515이다.

출력

각 블록마다 한 줄에, 언어에 속한 어떤 문자열이 zz를 부분 문자열로 포함하면 YES를, 그렇지 않으면 NO를 출력한다.

예제3

  1. 예제 1

    입력
    aa
    bb
    ab
    aaabb
    a
    b
    ab
    ba
    
    예상 출력
    YES
    NO
    
  2. 예제 2

    입력
    aa
    bb
    ab
    aabb
    
    예상 출력
    YES
    
  3. 예제 3

    입력
    a
    b
    aab
    ba
    
    예상 출력
    NO