#2421. 量子通信

量子通信

题目描述

小 Z 正在自学量子计算机相关知识,最近他在研究量子通信章节,并遇到了一个有趣的问题。在该问题中,Alice 和 Bob 正在进行量子通信,它们的通信语言是一个大小为 nn 的字典 SS,在该字典中,每一个单词 sis_i(1≤i≤n1\le i\le n)都可以用一个 256256 位的 01\text{01} 串来表示。在本题中 sis_i 可以通过调用函数 gen 来生成,选手可以在题目目录下的 gen.cpp 中查看,该函数的参数 n,a1,a2n,a_1,a_2 将由输入数据给出。

Alice 和 Bob 接下来要进行 mm 次通信,每次通信由 Alice 向 Bob 传输恰好一个字典中的单词。然而,两人使用的通信信道并不可靠,会受到噪音的干扰。更具体地,对 于第 ii 次传输,记 Alice 传输的原单词为 xix_i,该 01\text{01} 串会受噪音干扰而 翻转最多 kik_i 位。

换句话说,记 Bob 这次收到的 01\text{01} 串为 yiy_i,它与 xix_i 相比,可能有最多 kik_i 位是不同的,并且 yiy_i 可能不在字典 SS 中出现。

与此同时,Bob 得知坏人 Eve 也潜入了两人的通信信道,并准备干扰两人的通信。

他的干扰方式是将 Bob 收到的 01\text{01} 串变为任意的 256256 位 01\text{01} 串,并且这个串可能不在字典 SS 中出现。Eve 非常狡猾,他不一定会对每次通信都进行干扰。

现在 Bob 找来了你帮忙,对于接下来的每次通信,你需要根据 Bob 最终收到的 01\text{01} 串以及这次通信的噪音干扰阈值 kik_i(0≤ki≤150\le k_i\le 15),判断这次通信是否有可能没有受到 Eve 的干扰(即 Bob 收到的 01\text{01} 串可以由字典中的某个单词翻转至多 kik_i 位后得到)。本次通信如果有可能没受到 Eve 干扰,请你输出 1,否则输出 0。Bob 很信任你的能力,所以你需要在线地回答结果,具体要求见输入格式。

为了降低读入用时,Bob 收到的串将用长度为 6464 的 1616 进制串给出,1616 进制串中包含数字字符 0∼90\sim 9 与大写英文字母 A∼F\text{A}\sim \text{F},其中字符 A∼F\text{A}\sim \text{F} 依次表示数值 10∼1510\sim 15。

1616 进制串可以逐位转化为 01\text{01} 串,例如:55 对应 0101\text{0101},A\text{A} 对应 10101010,C\text{C} 对应 1100\text{1100}。

输入格式

从文件 qi.in 中读入数据。

输入数据第一行包含四个正整数 n,m,a1,a2n, m, a_1, a_2,分别表示字典大小,通信次数,以及 gen 函数中参数 a1 和 a_2 的初始值。

选手需要在自己的程序中调用题目描述中提到的 gen 函数生成单词表,选手可以复制并使用 gen.cpp 中的代码,程序中的布尔数组 s[N+1][256] 即为所有的单词。

接下来 mm 行,每行包含一个长度为 6464 的 1616 进制串和一个非负整数 kik_i,分别表示第 ii 次通信 Bob 最终收到的 01\text{01} 串和噪音干扰阈值。

为了强制选手在线地回答询问,选手根据 1616 进制串还原出 256256 位 01\text{01} 串后,将 01\text{01} 串每一位异或上 lastanslastans 才能得到这次通信中 Bob 收到的真实 01\text{01} 串,其中 lastans∈{0,1}lastans\in \{0, 1\} 表示上一次询问的答案,第一个询问前 lastanslastans 初始值为 00。

注意:使用 scanf 和 printf 函数读入或输出 unsigned long long 类型变量时,对应的占位符为 llu。

输出格式

输出到文件 qi.out 中。 输出共 mm 行,每行一个整数 00 或 11 表示当前询问的答案。

询问举例

为了方便解释题意,我们使用了直接给出字典中单词、缩小单词长度为 44、允许离线地回答询问等方式,对简化的情况举例。

考虑字典大小为 n=2n = 2,单词有 1010\text{1010} 和 01110111。

对于询问 B = 1011\text{B = 1011} 和 k1=1k_1 = 1,回答应该是 1,通过翻转 1010\text{1010} 的第 44 位(从高位到低位,下同)得到。
对于询问 1 = 0001\text{1 = 0001} 和 k2=2k_2 = 2,回答应该是 1,通过翻转 0111\text{0111} 的第 2,32,3 位得到。
对于询问 1 = 0001\text{1 = 0001} 和 k3=1k_3 = 1,回答应该是 0。

  • 翻转 1010\text{1010} 至多 11 位可得 1010\text{1010}、0010\text{0010}、1110\text{1110}、1000\text{1000}、1011\text{1011}。
  • 翻转 0111\text{0111} 至多 11 位可得 0111\text{0111}、1111\text{1111}、0011\text{0011}、0101\text{0101}、0110\text{0110}。
  • 无法得到 1 = 0001\text{1 = 0001},它必定是由 Eve 干扰得到的。

样例 1

见选手目录下的 qi1.in 与 qi1.ans。

样例 2

见选手目录下的 qi2.in 与 qi2.ans。

样例 3

见选手目录下的 qi3.in 与 qi3.ans。

数据规模与约定

对于所有测试点:1≤n≤4×1051\le n\le 4\times 10^5,1≤m≤1.2×1051\le m\le 1.2\times 10^5,0≤k≤150\le k\le 15,a1a_1 和 a2a_2 在 [0,264−1][0, 2^{64} − 1] 之间均匀随机生成。

测试点编号 n=n = m=m = ki≤k_i\le 特殊性质
11 1010 22 无
22 500500 1515
33 10310^3 00
44 2×1032\times 10^3 22
55 5×1035\times10^3 5×1035\times 10^3 1515
66 10410^4
77 20×10420\times 10^4 2×1042\times 10^4
88 10510^5 11
99 4×1054\times 10^5 1.2×1051.2\times 10^5
1010 5×1045\times 10^4 22
1111 7×1047\times 10^4 33
1212 1×1051\times 10^5 22
1313 3×1043\times 10^4 55
1414 6×1046\times 10^4 44
1515 1.2×1051.2\times 10^5 55
1616 6×1046\times 10^4 88 所有询问串随机生成
1717 1.2×1051.2\times 10^5 1212
1818 4×1054\times 10^5 10510^5 1515
1919 3×1043\times 10^4 77 无
2020 6×1046\times 10^4 99
2121 9×1049\times 10^4 1111
2222 2×1052\times 10^5 1.2×1051.2\times 10^5 1212
2323 4×1054\times 10^5 8×1048\times 10^4 1515
2424 1×1051\times 10^5
2525 1.2×1051.2\times 10^5