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

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

Basic Basis

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

요약
4k비트 벡터 n개가 주어질 때, 각 질의 벡터마다 앞에서부터 i번째까지의 벡터 중 비어 있지 않은 부분집합을 XOR해 질의 벡터를 만들 수 있는 최소 i를 구한다.
난이도

어려움10점 중 8점

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

문제

k×4k \times 4비트짜리 비트 문자열 nn개 b1,b2,…,bnb_1, b_2, \dots, b_n이 주어진다.

마찬가지로 k×4k \times 4비트짜리 비트 문자열 mm개 a1,a2,…,ama_1, a_2, \dots, a_m도 주어진다.

f(x)f(x)를 다음과 같이 정의하자. b1,b2,…,bib_1, b_2, \dots, b_i에서 공집합이 아닌 부분집합을 골라 전부 XOR했을 때 xx를 얻을 수 있는 최소 인덱스 ii가 f(x)f(x)이다. 그러한 인덱스가 없으면 f(x)=−1f(x) = -1이다.

f(a1),f(a2),…,f(am)f(a_1), f(a_2), \dots, f(a_m)을 출력하라.

입력

첫째 줄에 정수 nn (1≤n≤1,0001 \le n \le 1,000), mm (1≤m≤1,0001 \le m \le 1,000), kk (1≤k≤401 \le k \le 40)가 주어진다. nn은 수열 bb의 길이, mm은 수열 aa의 길이이고, 두 수열의 원소는 모두 k×4k \times 4비트짜리 비트 문자열이다.

다음 nn개 줄에는 bib_i의 16진수 표현이 길이 kk인 문자열로 주어진다. 문자열은 16진수 숫자(‘0’–‘9’, ‘a’–‘f’)로만 이루어진다.

그다음 mm개 줄에는 aia_i의 16진수 표현이 위와 같은 형식으로 주어진다.

출력

mm개 줄을 출력한다. 각 줄에는 정수 하나가 들어가며, ii번째 줄의 정수는 f(ai)f(a_i)이다.

예제2

  1. 예제 1

    입력
    3 5 2
    02
    e1
    fa
    02
    e3
    1b
    e1
    ff
    
    예상 출력
    1
    2
    3
    2
    -1
    
  2. 예제 2

    입력
    5 6 2
    01
    02
    04
    08
    10
    01
    02
    03
    04
    05
    64
    
    예상 출력
    1
    2
    2
    3
    3
    -1