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

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

패리티

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

요약
이진 문자열 n개와 각각의 목표 비트가 주어질 때, 각 문자열에서 선택한 열들의 XOR이 목표 비트와 같아지는 크기 k 이하의 최소 열 부분집합을 구한다.
난이도

보통10점 중 7점

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

문제

길이가 모두 mm으로 같은 nn개의 이진 문자열 s1,…,sns_1, \dots, s_n이 주어진다. 각 문자열 sis_i에는 비트 bib_i가 하나씩 함께 주어진다. 문자열의 인덱스는 00부터 시작한다.

열 인덱스의 부분집합 S⊆{0,1,…,m−1}S \subseteq \{0, 1, \dots, m-1\}에 대해, 이 집합이 문자열 sis_i에 대해 만들어 내는 값을 "SS에 속한 위치들에서의 sis_i 비트들의 XOR"로 정의한다. (비트들의 XOR은 값이 11인 비트의 개수가 홀수이면 11, 아니면 00이다. 공집합의 XOR은 00이다.)

음이 아닌 정수 kk가 주어진다. 모든 i=1,…,ni = 1, \dots, n에 대해 sis_i에 대해 만들어지는 값이 bib_i와 같도록, 크기가 kk 이하인 부분집합 SS를 고르고자 한다.

예를 들어 s1=1010s_1 = 1010이고 S={0,3}S = \{0, 3\}이면, s1s_1에 대한 값은 인덱스 00의 비트 11과 인덱스 33의 비트 00의 XOR인 11이다.

크기가 kk 이하인 모든 유효한 부분집합 SS 중에서, 가능한 최소 크기를 출력한다. 그러한 부분집합이 존재하지 않으면 대신 그 사실을 알린다.

입력

첫째 줄에 두 정수 nn과 kk가 공백으로 구분되어 주어진다 (1≤n≤641 \le n \le 64, 0≤k≤100 \le k \le 10).

이어지는 nn개의 줄 각각에는 문자열 sis_i, 공백 하나, 그리고 비트 bib_i가 주어진다. 모든 문자열의 길이는 mm으로 같으며 (1≤m≤501 \le m \le 50), k≤mk \le m이다.

출력

∣S∣≤k|S| \le k이면서 모든 ii에 대해 SS에 속한 인덱스들에서의 sis_i 비트들의 XOR가 bib_i와 같은 부분집합 S⊆{0,1,…,m−1}S \subseteq \{0, 1, \dots, m-1\}의 최소 크기를 정수 하나로 출력한다. 그러한 부분집합이 존재하지 않으면 −1-1을 출력한다.

예제5

  1. 예제 1

    입력
    3 1
    111 1
    001 0
    011 1
    
    예상 출력
    1
    
  2. 예제 2

    입력
    4 7
    010001000111100011010010000011110000000000 0
    001101010101000101001011110001101010101111 0
    100111100101100000110000110110010110100101 0
    011010001110101111000000111101100010111111 1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    2 3
    10 0
    01 0
    
    예상 출력
    0
    
  4. 예제 4

    입력
    2 2
    10 1
    01 1
    
    예상 출력
    2
    
  5. 예제 5

    입력
    2 0
    10 1
    01 0
    
    예상 출력
    -1