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

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

이진 수열은 몇 개인가

시간 제한3초메모리 제한256 MB

요약
길이가 K인 이진 수열들로 이루어진 가장 작은 집합으로서, 해밍 거리가 2 이하인 두 원소의 합이 주어진 0, 1, 2 수열과 모두 일치하는 경우의 크기를 구합니다.
난이도

보통10점 중 7점

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

문제

길이가 KK인 이진 수열을 모은 집합 BB가 있다. BB의 각 원소는 각 항이 00 또는 11인 길이 KK짜리 수열이다.

정수 수열 ZiZ_i는 다음 과정으로 만든다.

  1. BB에서 수열 X=(x1,x2,…,xK)X = (x_1, x_2, \dots, x_K)를 하나 고른다.
  2. BB에서 dist(X,Y)≤2\mathrm{dist}(X, Y) \le 2를 만족하는 수열 Y=(y1,y2,…,yK)Y = (y_1, y_2, \dots, y_K)를 하나 고른다. 여기서 dist(X,Y)\mathrm{dist}(X, Y)는 두 수열의 해밍 거리, 즉 같은 자리의 값이 서로 다른 자리의 개수다. 예를 들어 dist((1,0,1,1),(1,1,1,1))=1\mathrm{dist}((1,0,1,1), (1,1,1,1)) = 1이고 dist((1,0,1,1,1,0,1),(1,0,0,1,0,0,1))=2\mathrm{dist}((1,0,1,1,1,0,1), (1,0,0,1,0,0,1)) = 2이다. XX와 YY로 같은 원소를 고를 수 있다.
  3. Zi=(x1+y1,x2+y2,…,xK+yK)Z_i = (x_1 + y_1, x_2 + y_2, \dots, x_K + y_K)로 둔다.

예를 들어 Zi=(1,0,1,2,2)Z_i = (1,0,1,2,2)는 X=(1,0,0,1,1)X = (1,0,0,1,1)과 Y=(0,0,1,1,1)Y = (0,0,1,1,1)로 만들 수 있다.

이 과정으로 만든 정수 수열 NN개 Z1,Z2,…,ZNZ_1, Z_2, \dots, Z_N이 주어진다. 이 NN개를 모두 만들 수 있는 집합 BB 중에서 원소 개수가 가장 적은 것을 찾아, 그 원소 개수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 KK와 NN이 공백 하나를 사이에 두고 주어진다. (1≤K≤201 \le K \le 20, 1≤N≤241 \le N \le 24)

다음 NN개 줄에 수열 ZiZ_i가 한 줄에 하나씩 주어진다. ii번째 줄의 jj번째 문자가 Zi,jZ_{i,j}의 값이고, 문자 사이에 구분자는 없다. 각 값은 00, 11, 22 중 하나이며 한 줄에 11은 많아야 두 개 나온다. 즉 주어지는 ZiZ_i는 모두 위 과정으로 만들 수 있는 수열이다.

출력

첫째 줄에 집합 BB의 최소 원소 개수를 출력한다.

예제1

  1. 예제 1

    입력
    5 2
    10122
    20022
    
    예상 출력
    2