说明
XOR 是一种按位运算符,当且仅当对应的输入位不同(一个为 1 而另一个为 0)时,结果的该位为 1。XOR 运算符通常用符号 ⊕ 表示,在大多数编程语言中则用字符 ^(脱字符)表示。例如,(10⊕6)=12。
$$\begin{aligned}
10\ &=>\ \ \ 1010 \\
6\ &=>\ \ \ 0110 \\
\quad\ &----\ \oplus \\
\quad\ & \quad \quad \quad 1100\ \ =>\ 12 \\
\end{aligned}$$
本题中,给定一个整数 N 和一个整数集合 S1..M。你的任务是计算有多少对整数 ⟨A,B⟩ 满足 1≤A,B≤(A⊕B)≤N,且 (A⊕B)∈/S。
例如,令 N=10,S1..4={4,6,7,10}。共有 6 对 ⟨A,B⟩ 满足条件。
- ⟨1,2⟩→(1⊕2)=3
- ⟨1,4⟩→(1⊕4)=5
- ⟨1,8⟩→(1⊕8)=9
- ⟨2,1⟩→(2⊕1)=3
- ⟨4,1⟩→(4⊕1)=5
- ⟨8,1⟩→(8⊕1)=9
注意,在此例中像 ⟨2,4⟩ 这样的对不满足条件,因为 (2⊕4)=6 而 6∈S。另一对如 ⟨5,1⟩ 也不满足条件,因为它违反了 A,B≤(A⊕B) 的要求。
输入格式
输入第一行包含两个整数 N 和 M(1≤N≤106;1≤M≤100000),分别表示给定的 N 和整数集合 S1..M 的大小。下一行包含 M 个整数 Si(1≤Si≤106),表示整数集合 S1..M。
输出格式
输出一行一个整数,表示满足 1≤A,B≤(A⊕B)≤N 且 (A⊕B)∈/S1..M 的 ⟨A,B⟩ 的对数。
10 4
4 6 7 10
6
8 5
4 3 5 8 1
10
20 7
3 7 18 15 12 18 19
50
5 6
1 2 3 4 5 6
0
提示
样例 #1 解释
此为题目描述中的示例。
样例 #2 解释
共有 10 对 ⟨A,B⟩ 满足条件。
- ⟨1,6⟩→(1⊕6)=7
- ⟨2,4⟩→(2⊕4)=6
- ⟨2,5⟩→(2⊕5)=7
- ⟨3,4⟩→(3⊕4)=7
- ⟨3,5⟩→(3⊕5)=6
- ⟨4,2⟩→(4⊕2)=6
- ⟨4,3⟩→(4⊕3)=7
- ⟨5,2⟩→(5⊕2)=7
- ⟨5,3⟩→(5⊕3)=6
- ⟨6,1⟩→(6⊕1)=7
翻译由 DeepSeek 完成