부분마스크 무시하기

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

요약
각 k비트 마스크 x마다 x를 부분마스크로 포함하지 않는 첫 번째 배열 원소의 위치를 구해 모두 더한 값을 998244353으로 나눈 나머지를 출력한다.
난이도

어려움10점 중 8점

유형
비트 연산, 동적 계획법, 조합론, 수학
정답자
아직 제출이 없습니다

문제

n개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. 각 정수는 0 이상 2k−12^k - 1 이하이다.

f(x)f(x)를 (ai&x)≠ai(a_i \& x) \neq a_i인 가장 작은 ii로 정의하고, 그러한 ii가 없으면 0으로 정의한다. 여기서 (a&b)(a \& b)는 비트 AND 연산이다.

f(0)+f(1)+…+f(2k−1)f(0) + f(1) + \ldots + f(2^k - 1)을 구하시오. 이 값이 매우 클 수 있으므로 998 244 353998\,244\,353으로 나눈 나머지를 구하시오.

입력

첫째 줄에 두 정수 nn, kk가 주어진다. (1≤n≤1001 \le n \le 100, 1≤k≤601 \le k \le 60)

둘째 줄에 nn개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. (0≤ai<2k0 \le a_i < 2^k)

출력

f(0)+f(1)+…+f(2k−1)f(0) + f(1) + \ldots + f(2^k - 1)을 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

힌트

첫 번째 예제에서 f(0)=2f(0) = 2, f(1)=0f(1) = 0이다.

두 번째 예제에서 f(0)=1f(0) = 1, f(1)=1f(1) = 1, f(2)=2f(2) = 2, f(3)=0f(3) = 0이다.

예제3

  1. 예제 1

    입력
    2 1
    0 1
    
    예상 출력
    2
    
  2. 예제 2

    입력
    2 2
    2 1
    
    예상 출력
    4
    
  3. 예제 3

    입력
    5 10
    389 144 883 761 556
    
    예상 출력
    1118