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

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

코드 고치기

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

요약
프리픽스 코드와 새 이진 문자열이 주어질 때, 전체 집합이 다시 프리픽스가 없도록 만들기 위해 덧붙여야 하는 최소 비트 수를 구한다.
난이도

어려움10점 중 8점

유형
그리디, 트리, DFS, 비트 연산
정답자
아직 제출이 없습니다

문제

이진 문자열은 집합 {0,1}\{0, 1\}의 문자로만 이루어진 문자열입니다. 코드(code) 는 이진 문자열의 중복집합(multiset)으로, 같은 문자열이 여러 번 나타날 수 있습니다. 어떤 코드에 속한 그 어떤 문자열도 다른 문자열의 접두사(prefix)가 아닐 때, 그 코드를 고정 코드(fixed code) 라고 부릅니다.

코드 A={a1,a2,…,an}A = \{a_1, a_2, \ldots, a_n\}가 코드 B={b1,b2,…,bn}B = \{b_1, b_2, \ldots, b_n\}로 확장(extend) 된다는 것은, 모든 1≤i≤n1 \le i \le n에 대해 aia_i가 bib_i의 접두사임을 뜻합니다. 이때 확장의 비용은 ∑i=1n(∣bi∣−∣ai∣)\sum_{i=1}^{n} (|b_i| - |a_i|)이며, ∣x∣|x|는 문자열 xx의 길이(문자 개수)입니다.

고정 코드 CC와 새로운 이진 문자열 ss가 주어집니다. C∪{s}C \cup \{s\}를 고정 코드로 확장하는 데 필요한 최소 비용을 구하세요. 다시 말해, C∪{s}C \cup \{s\}에 속한 문자열 중 0개 이상에 비트를 덧붙여(append) 전체가 고정 코드가 되도록 할 때, 덧붙이는 비트 수의 최솟값을 구하면 됩니다.

입력

첫째 줄에 테스트 케이스의 개수 tt (1≤t≤201 \le t \le 20)가 주어집니다. 이어지는 tt개의 줄에는 각각 공백으로 구분된 이진 문자열이 1개 이상 주어집니다. 한 줄에 등장하는 문자열은 최대 41개이며, 각 문자열의 길이는 최대 40입니다. 각 줄의 마지막 문자열은 새로 들어오는 문자열 ss이고, 나머지 문자열들이 그 테스트 케이스의 고정 코드 CC를 이룹니다.

출력

각 테스트 케이스마다 C∪{s}C \cup \{s\}를 고정 코드로 확장하는 최소 비용을 한 줄에 하나씩 출력합니다.

예제1

  1. 예제 1

    입력
    2
    001 01 00
    000 001 010 011 100 101 110 1
    
    예상 출력
    1
    2