#P15603. [ICPC 2021 Jakarta R] XOR Pairs

[ICPC 2021 Jakarta R] XOR Pairs

题目描述

XOR 是一种按位运算符,当且仅当对应的输入位不同(一个为 1 而另一个为 0)时,结果的该位为 1。XOR 运算符通常用符号 ⊕\oplus 表示,在大多数编程语言中则用字符 ^(脱字符)表示。例如,(10⊕6)=12(10 \oplus 6) = 12。

$$\begin{aligned} 10\ &=>\ \ \ 1010 \\ 6\ &=>\ \ \ 0110 \\ \quad\ &----\ \oplus \\ \quad\ & \quad \quad \quad 1100\ \ =>\ 12 \\ \end{aligned}$$

本题中,给定一个整数 NN 和一个整数集合 S1..MS_{1..M}。你的任务是计算有多少对整数 ⟨A,B⟩\langle A, B \rangle 满足 1≤A,B≤(A⊕B)≤N1 \leq A, B \leq (A \oplus B) \leq N,且 (A⊕B)∉S(A \oplus B) \notin S。

例如,令 N=10N = 10,S1..4={4,6,7,10}S_{1..4} = \{4, 6, 7, 10\}。共有 6 对 ⟨A,B⟩\langle A, B \rangle 满足条件。

  • ⟨1,2⟩→(1⊕2)=3\langle 1, 2 \rangle \rightarrow (1 \oplus 2) = 3
  • ⟨1,4⟩→(1⊕4)=5\langle 1, 4 \rangle \rightarrow (1 \oplus 4) = 5
  • ⟨1,8⟩→(1⊕8)=9\langle 1, 8 \rangle \rightarrow (1 \oplus 8) = 9
  • ⟨2,1⟩→(2⊕1)=3\langle 2, 1 \rangle \rightarrow (2 \oplus 1) = 3
  • ⟨4,1⟩→(4⊕1)=5\langle 4, 1 \rangle \rightarrow (4 \oplus 1) = 5
  • ⟨8,1⟩→(8⊕1)=9\langle 8, 1 \rangle \rightarrow (8 \oplus 1) = 9

注意,在此例中像 ⟨2,4⟩\langle 2, 4 \rangle 这样的对不满足条件,因为 (2⊕4)=6(2 \oplus 4) = 6 而 6∈S6 \in S。另一对如 ⟨5,1⟩\langle 5, 1 \rangle 也不满足条件,因为它违反了 A,B≤(A⊕B)A, B \leq (A \oplus B) 的要求。

输入格式

输入第一行包含两个整数 NN 和 MM(1≤N≤1061 \leq N \leq 10^6;1≤M≤100 0001 \leq M \leq 100\,000),分别表示给定的 NN 和整数集合 S1..MS_{1..M} 的大小。下一行包含 MM 个整数 SiS_i(1≤Si≤1061 \leq S_i \leq 10^6),表示整数集合 S1..MS_{1..M}。

输出格式

输出一行一个整数,表示满足 1≤A,B≤(A⊕B)≤N1 \leq A, B \leq (A \oplus B) \leq N 且 (A⊕B)∉S1..M(A \oplus B) \notin S_{1..M} 的 ⟨A,B⟩\langle A, B \rangle 的对数。

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⟩\langle A, B \rangle 满足条件。

  • ⟨1,6⟩→(1⊕6)=7\langle 1, 6 \rangle \rightarrow (1 \oplus 6) = 7
  • ⟨2,4⟩→(2⊕4)=6\langle 2, 4 \rangle \rightarrow (2 \oplus 4) = 6
  • ⟨2,5⟩→(2⊕5)=7\langle 2, 5 \rangle \rightarrow (2 \oplus 5) = 7
  • ⟨3,4⟩→(3⊕4)=7\langle 3, 4 \rangle \rightarrow (3 \oplus 4) = 7
  • ⟨3,5⟩→(3⊕5)=6\langle 3, 5 \rangle \rightarrow (3 \oplus 5) = 6
  • ⟨4,2⟩→(4⊕2)=6\langle 4, 2 \rangle \rightarrow (4 \oplus 2) = 6
  • ⟨4,3⟩→(4⊕3)=7\langle 4, 3 \rangle \rightarrow (4 \oplus 3) = 7
  • ⟨5,2⟩→(5⊕2)=7\langle 5, 2 \rangle \rightarrow (5 \oplus 2) = 7
  • ⟨5,3⟩→(5⊕3)=6\langle 5, 3 \rangle \rightarrow (5 \oplus 3) = 6
  • ⟨6,1⟩→(6⊕1)=7\langle 6, 1 \rangle \rightarrow (6 \oplus 1) = 7

翻译由 DeepSeek 完成