7557: BZOJ3557:[Ctsc2014]随机数
Description
露露、花花和萱萱最近对计算机中的随机数产生了兴趣。为大家所熟知的是,有计算机生成的随机数序列并非真正的随机数, 而是由一定法则生成的伪随机数。 某一天,露露了解了一种生成随机数的方法,成为Mersenne twister。给定初始参数m∈Z+,x∈Z+∩[0,2m)和初值M0∈Z+∩[0,2m), 它通过下列递推式构造伪随机数列{Mn}: 其中XOR是二进制异或运算(C/C++中的^运算)。而参数x的选取若使得该数列在长度趋于无穷时,近似等概率地在Z+∩(0,2m)中取值, 就称x为好的。例如,在m>1时x=0就显然不是好的。 在露露向伙伴们介绍了Mersenne twister之后,花花想用这一些经典的随机性测试来检验它的随机性强度。为此,花花使用计算机计算 了一些Mk。 但细心的萱萱注意到,花花在某次使用二进制输入k时,在末尾多输入了l个0,。她正想告诉花花这个疏忽,然而花花已经计算并记录了 错误的Mk而没有记录k的值。虽然这其实不是什么致命的问题,但是在萱萱告诉花花她这个疏漏时,作为完美主义者的花花还是恳求萱萱 帮她修正Mk的值。萱萱便把这个任务交给了她的AI——你。
输入格式
第一行包含一个正整数m, 第二行为二进制表示的x(共m个数,从低位到高位排列) 第三行为二进制表示的M0(排列方式同x), 第四行包含一个整数type。 接下来分为两种可能的情况: 1.type=0(萱萱记下了花花的输入):则第五行包含一个整数,表示萱萱记下来的正确的k值。 2.type=1(萱萱未能记下花花的输入):则第五行为l,第六行输入花花计算出错误的二进制表示的Mk。
输出格式
仅一行,为m位的01串,表示你求得的正确Mk(同样要求从低位到高位)。
样例输入
10 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 1 1 0 100
样例输出
0101111001
提示
M<=1000000 K<=10^6
题目来源
没有写明来源