T723552 第40次CSP认证第二题:数字变换 (transform)

题目描述

小C设计了一种变换 $F$。若输入 $[0, 2^{9})$ 中的整数,则输出也是 $[0, 2^{9})$ 中的整数。 记 $\oplus$ 为按位异或运算(即 C++/Java/Python 中的 $\wedge$ 运算符)。 若 $x$, $k$ 均为 $[0, 2^{3})$ 内的整数,定义 $ f(x, k) = \big( (x^{2} + k^{2}) \bmod 2^{3} \big) \oplus k . $ 若 $x$ 为 $[0, 2^{9})$ 内的整数,$k$ 为 $[0, 2^{3})$ 内的整数。 将 $x$ 的二进制表示进行高位补零,使其恰好为 9 位。 $g(x, k)$ 将这 9 个二进制位分为高三位、中三位、低三位三组,并视为三个数字进行变换,具体如下图所示: ![](https://image2url.com/r2/default/images/1768908539400-85e3a75e-431d-4ef3-b54f-e7e7666df476.png) 记 $f_0$ 为 $F$ 变换的输入值,并定义 $ f_i = g(f_{i-1}, k_i), \quad i = 1, 2, 3, \dots, m, $ 则 $f_m$ 为 $F$ 变换的输出值。 长为 $m$ 的序列 $k = (k_1, k_2, \dots, k_m)$ 是一个给定的参数序列,其中每个 $k_i$ 都是 $[0, 2^{3})$ 之间的整数。 现在小C有 $n$ 个经过 $F$ 变换后得到的值,分别为 $a_1, a_2, \dots, a_n$(每个 $a_j$ 对应某个 $f_m$)。 小C想知道它们对应的输入 $f_0$ 分别是什么。

输入格式

从标准输入读入数据。 第一行两个正整数 $n, m$。 第二行有 $m$ 个非负整数,分别为 $k_1, k_2, \dots, k_m$。 第三行有 $n$ 个非负整数,分别为 $a_1, a_2, \dots, a_n$。

输出格式

输出到标准输出。 输出一行 $n$ 个非负整数,表示 $a_1, a_2, \dots, a_n$ 对应的输入。

说明/提示

### 样例1解释 可以枚举可能的输入并验证。 若枚举到的输入为 $f_{0}=101$。 对于 $f_{1}=g(101,3)$ 来说:$a=1$,$b=4$,$c=5$,$c\oplus f(b,3)=7$,$a\oplus f(c,3)=0$,故 $f_{1}=312$。 对于 $f_{2}=g(312,5)$ 来说:$a=4$,$b=7$,$c=0$,$c\oplus f(b,5)=7$,$a\oplus f(c,5)=0$,故 $f_{2}=504$。 因此若输入为 $101$,则输出为 $504$,因此 $101$ 是其对应的输入。 如果枚举的输入是别的数字,可以同上验证其输出不是 $504$。 ### 样例2 见题目目录下的 *2.in* 与 *2.ans*。 ### 样例3 见题目目录下的 *3.in* 与 *3.ans*。 ### 子任务 80\% 的测试数据满足:$1\le n\le 100$,$1\le m\le 20$。 100\% 的测试数据满足:$1\le n\le 5\times10^{5}$,$1\le m\le 10^{3}$,$0\le k_{i}