#CSP202512B. 数字变换

数字变换

时间限制: 1.5 秒

空间限制: 512 MB

题目描述

小 C 设计了一种变换 FF,若输入 [0,29)\left[0,2^9\right) 中的整数,则输出也是 [0,29)\left[0,2^9\right) 中的整数。

\oplus 为按位异或运算,即 C++/Java/Python 中的 ^ 运算符。

x,kx,k 均为 [0,23)\left[0,2^3\right) 内的整数,定义 $f(x,k)=\left(\left(x^2+k^2\right)\bmod 2^3\right)\oplus k$。

xx[0,29)\left[0,2^9\right) 内的整数,kk[0,23)\left[0,2^3\right) 内的整数。将 xx 的二进制表示进行高位补零的操作,使其恰好为 99 位。g(x,k)g(x,k) 将会把这 99 个二进制位分为高三位、中三位、低三位三组并将其视为三个数字分别进行变换,具体如下图所示:

img

f0f_0FF 变换的输入值,并定义 fi=g(fi1,ki)f_i=g(f_{i-1},k_i)i1,2,3,,mi\in{1,2,3,\cdots,m},则 fmf_mFF 变换的输出值。长为 mm 的序列 kk 是一个给定的参数序列,并且其中每个数字都是 [0,23)\left[0,2^3\right) 之间的整数。

现在小 C 有 nn 个经过 FF 变换后得到的值,分别为 a1,a2,,ana_1,a_2,\cdots,a_n,小 C 想知道它们对应的输入分别是什么。

输入格式

从标准输入读入数据。

第一行两个正整数 n,mn,m

第二行有 mm 个非负整数,分别为 k1,k2,,kmk_1,k_2,\cdots,k_m

第三行有 nn 个非负整数,分别为 a1,a2,,ana_1,a_2,\cdots,a_n

输出格式

输出到标准输出。

输出一行 nn 个非负整数,表示 a1,a2,,ana_1,a_2,\cdots,a_n 对应的输入。

1 2
3 5
504
101

样例 1 解释

可以枚举可能的输入并验证。

若枚举到的输入为 f0=101f_0=101

对于 f1=g(101,3)f_1=g(101,3) 来说:a=1, b=4, c=5, cf(b,3)=7, af(c,3)=0a=1,~b=4,~c=5,~c\oplus f(b,3)=7,~a\oplus f(c,3)=0,故 f1=312f_1=312

对于 f2=g(312,5)f_2=g(312,5) 来说:a=4, b=7, c=0, cf(b,5)=7, af(c,5)=0a=4,~b=7,~c=0,~c\oplus f(b,5)=7,~a\oplus f(c,5)=0,故 f2=504f_2=504

因此若输入为 101101,则输出为 504504,因此 101101 是其对应的输入。

如果枚举的输入是别的数字,可以同上验证其输出不是 504504

样例 2

见题目文件区的 2.in2.ans

样例 3

见题目文件区的 3.in3.ans

子任务

80%80\% 的测试数据满足:1n1001\le n\le 1001m201\le m\le 20

100%100\% 的测试数据满足:$1\le n\le 5 \times 10^{5},~1\le m \le10^{3},~0\le k_i<2^3,~0\le a_i<2^9$,且只有唯一的输入能够得到这些输出。