小强和阿米巴是好朋友。
阿米巴研发出了一套相当高端的图片识别系统,并把它写成了一个手机app。这个识别系统具备特殊的识别能力,比如说,它能够识别一张图片里是否有萌萌的小狗。
这个app由两个模块组成,特征提取模块和分类模块。每当小强拍摄一张图片,特征提取模块就从中提取出一个长度为
为了保护分类算法,阿米巴的这个 app 是经过加密处理的。经过对阿米巴的死缠烂打,小强弄明白了这个分类算法的工作原理。
分类模块会从输入的这个
举个例子,分类模块的算法步骤可能是这样的:
function f(x[]):
z[0] = x[0] xor x[4] xor x[7]
z[1] = x[12] xor x[2]
z[2] = x[0] xor x[1] xor x[2] xor x[3]
result = h(z[])
return result xor g(x[])
其中 x[] 是一个 01 串,x[i] 表示其中的第
g(x[]) 是某个在大多数情况下返回
z[0], z[1], z[2] 就是 “有效信息”。
为了让小强无法从app中看出算法,这个算法被进行了混淆。为了方便起见,我们把混淆之后的算法叫做“混淆版算法”。混淆版算法的代码共有
y[u] = (not (y[v] and y[s])) xor y[d] xor y[e]
其中 y[] 是一个长度为
对于阿米巴的这种以损失性能为代价进行加密的行径,小强感到很愤怒。于是,小强打算从混淆版算法中破解出阿米巴的分类算法。为了方便起见,我们把破解得到的算法叫做“破解版算法”。小强希望你能够帮他破解出:
- 如何提取有效信息。这个可以表述为
个 的子集,每个子集对应了一个有效信息是从哪几个输入位异或得到的; - 把这
位有效信息映射到分类结果上的函数 。该函数用一个长度为 ,每一位均为 或 的查找表表示;这 位分别对应了 位有效信息每一种可能的情况。
当然,这种破解算法是不唯一的,即,可能会有多种有效信息提取方法和查找表的组合。你只需要给出其中的一种即可。
阿米巴保证,引入的噪声比例不超过
同时,阿米巴也保证,这
输入格式
第一行包含
接下来
输出格式
先输出
接下来输出一行一个长度为
样例一
input
3 2 4 1 0 1 2 2 2
output
001 010 1110
explanation
样例输入等价于如下代码
y[] = 0000
input x[0..n-1]
y[0..n-1] = x[0..n-1]
y[0] = (not (y[1] and y[2])) xor y[2] xor y[2]
output y[0]
其中 x[0..n-1] 表示 01 串
在这段代码中,每一种输入对应的输出如下:
input | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
output | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
样例输出是一种破解方案,等价于如下代码:
input x[0..n-1]
z[0] = x[2]
z[1] = x[1]
output h(z[])
z[] | 00 | 01 | 10 | 11 |
h(z[]) | 1 | 1 | 1 | 0 |
可以发现,对于每一种输入,破解版算法和混淆版算法的输出是相同的。
样例二
见样例数据下载。
限制与约定
对于 10% 的数据,
对于另外 30% 的数据,
对于另外 20% 的数据,
对于另外 20% 的数据,
对于另外 20% 的数据,
对于所有的数据,
时间限制:
空间限制:
提示
使用位运算一次在多个输入上求出函数值可以极大的加速你的程序。