#W1008. 位掩码

位掩码

题目背景

位掩码是一种非常强大的东西,常常用来过滤数据,现在你被小 k 给定了一个任务,你需要从一堆数字中求和,检查有哪些方案能够通过掩码测试

题目描述

给定一个长度为 nn 的正整数数组 aa,以及两个整数 AA 和 BB。 请你计算:从数组中选取任意个数(每个数只能选一次),设它们的和为 SS,满足如下条件的方案数:

(S&A)=B(S \text {\&} A) = B

其中 & 表示按位与运算。

输入格式

第一行包含三个整数 n,A,Bn,A,B。(保证 1≤n≤251 \leq n \leq 25 , 1≤A,B≤1091 \leq A, B \leq 10^9)

第二行包含 nn 个正整数,表示数组中的元素。(保证 1≤ai≤1071 \leq a_i \leq 10^7)

输出格式

一个整数,表示满足条件的方案总数。

样例

3 7 2
1 2 4
1

样例解释

数组为 [1,2,4][1, 2, 4],A=7,B=2A=7, B=2。我们需要 (S & 7)=2(S \text{ \& } 7) = 2。

  1. 选取 {2}\{2\}:S=2S=2,2 & 7=22 \text{ \& } 7 = 2(符合)。
  2. 选取 {2,4}\{2, 4\}:S=6S=6,6 & 7=6≠26 \text{ \& } 7 = 6 \neq 2(不符)。
  3. 选取 {1,2,4}\{1, 2, 4\}:S=7S=7,7 & 7=7≠27 \text{ \& } 7 = 7 \neq 2(不符)。by软工25王凯龙