#P837. 快速异或变换

快速异或变换

题目描述

对于多项式乘法,,我们可以利用快速傅里叶变换(Fast Fourier Transform)在O(nlogn)O(nlogn)的时间复杂度内快速解决。

现在神犇ccz提出了一种新的多项式运算\bigotimes

F(x)=i=0n1fixiF(x) = \sum_{i=0}^{n-1}f_{i}x^{i}

G(x)=i=0n1gixiG(x) = \sum_{i=0}^{n-1}g_{i}x^{i}

H(x)=i=0n1hixiH(x) = \sum_{i=0}^{n-1}h_{i}x^{i}

$h_{m} = \bigotimes_{i=0}^{m}f_{i} \bigotimes g_{m-i}$

其中\bigotimes表示异或运算,即C或C++中的^运算,并相应的提出了一种快速异或变换(Fast Xor Transform)来快速进行这种新的运算。

下面告诉你两个多项式F(x)F(x),G(x)G(x),请你实现快速异或变换并输出H(x)H(x)

输入格式

第一行是一个整数nn

接下来一行nn个整数,第ii个表示fi1f_{i-1}

接下来一行nn个整数,第ii个表示gi1g_{i-1}

输出格式

一行nn个整数,第ii个表示hi1h_{i-1}

样例

ex_fxt1.in

5
1 9 2 6 8
1 7 105 110 102

ex_fxt1.ans

0 14 101 13 99

样例解释

异或运算(C/C++的^运算)规则如下:

A,BA,B为两个3232位无符号整数,A,BA,B的二进制表示从低位到高位分别为a1a32a_{1} \dots a_{32},b1b32b_{1} \dots b_{32},设AB=CA \bigotimes B=CCC二进制表示从低位到高位分别为c1c32c_{1} \dots c_{32},则ci=(ai!=bi)c_{i} = (a_{i}!=b_{i}),即若A,BA,B的第ii不同,则CC的第ii位为11,否则为00

例如:

99的二进制表示为

0000000000000000000000000000100100000000000000000000000000001001

77的二进制表示为

0000000000000000000000000000011100000000000000000000000000000111

979 \bigotimes 7的二进制表示为

0000000000000000000000000000111000000000000000000000000000001110

1414

该样例中,h0=f0g0=0h_{0}=f_{0} \bigotimes g_{0}=0,$h_{1}=(f_{0} \bigotimes g_{1}) \bigotimes (f_{1} \bigotimes g_{0})=14$,$h_{2}=(f_{0} \bigotimes g_{2}) \bigotimes (f_{1} \bigotimes g_{1}) \bigotimes (f_{2} \bigotimes g_{0})=101$,余下的同理。

数据范围

对于60%60\%的数据,n1000n \leq 1000

对于100%100\%的数据,1n1000001 \leq n \leq 1000000ai,bi1090 \leq a_i,b_i \leq 10^{9}