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

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

코드 비교

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

요약
HAL 프로그램에서 RBN 프로그램의 연속한 줄 구간과 변수 이름의 단사 치환 및 오른쪽 피연산자 교환까지 허용해 일치하는 가장 긴 구간을 찾는다.
난이도

보통10점 중 7점

유형
문자열 매칭, 해시맵, 동적 계획법
정답자
아직 제출이 없습니다

문제

회사 RBN과 회사 HAL은 모두 한 줄에 하나의 문장을 쓰는 프로그래밍 언어를 사용한다. 각 문장은 다음과 같은 형태이다.

STOREA = STOREB + STOREC

여기서 STOREA, STOREB, STOREC는 변수 이름이다. 즉 각 줄은 첫 번째 열에서 시작하는 변수 이름, 공백, 등호, 공백, 두 번째 변수 이름, 공백, 덧셈 기호 +, 공백, 세 번째 변수 이름 순서로 이루어진다. 한 줄에서 같은 변수 이름이 여러 번 나올 수도 있다. 변수 이름은 대문자 알파벳(A–Z) 11개 이상 88개 이하로 이루어진다.

HAL이 RBN의 소스 코드에서 연속된 여러 줄을 그대로 복사하되, 다음과 같은 사소한 변형만 가했다고 하자.

  • HAL은 일부 변수 이름을 바꾸었을 수 있다. 즉 RBN 프로그램의 연속된 줄들을 가져와, 그 안의 각 변수마다 그 변수의 모든 등장을 새로운 변수 이름으로 바꾸었다(새 이름이 원래 이름과 같을 수도 있다). 단, 서로 다른 두 변수를 같은 새 이름으로 바꾸지는 않았다(즉 변수 이름 치환은 단사이다).
  • HAL은 일부 줄에서 오른쪽 두 항의 순서를 바꾸었을 수 있다. 즉 STOREA = STOREB + STOREC를 STOREA = STOREC + STOREB로 바꿀 수 있다.
  • HAL은 RBN 소스 코드의 줄 순서는 바꾸지 않았다.

RBN 프로그램과 HAL 프로그램이 주어질 때, 위 변형들을 통해 RBN의 연속된 줄들로부터 만들어질 수 있는, HAL 프로그램의 가장 긴 연속된 줄들의 개수를 구하여라. 두 프로그램에서 대응되는 줄들이 반드시 같은 줄 번호에서 시작할 필요는 없다.

입력

첫째 줄에 공백으로 구분된 두 정수 RR와 HH가 주어진다(1≤R≤10001 \le R \le 1000, 1≤H≤10001 \le H \le 1000). RR은 RBN 프로그램의 줄 수, HH는 HAL 프로그램의 줄 수이다.

다음 RR개의 줄에 RBN 프로그램이 주어진다.

그다음 HH개의 줄에 HAL 프로그램이 주어진다.

출력

HAL이 RBN에서 복사하여 변형했을 수 있는 가장 긴 연속된 줄들의 개수를 정수 하나로 한 줄에 출력한다. (그런 줄이 하나도 없으면 00을 출력한다.)

노트

예제에서는 RBN 프로그램에 치환 RA → HM, RB → D, RC → HN, D → HA, RE → HB를 적용하면 RBN의 1–2번째 줄이 HAL의 2–3번째 줄과 같아진다. 세 줄 이상이 일치하는 경우는 없으므로 답은 22이다.

예제1

  1. 예제 1

    입력
    4 3
    RA = RB + RC
    RC = D + RE
    RF = RF + RJ
    RE = RF + RF
    HD = HE + HF
    HM = HN + D
    HN = HA + HB
    
    예상 출력
    2