Xor Shift
题目描述
给出两个长度为 N 的非负整数序列 a={a0,…,aN−1} 和 b={b0,…,bN−1}。
Snuke 会选择一个整数 k,使得 0 \leq k < N,以及一个不小于 0 的整数 x,来构造一个新的长度为 N 的序列 a′={a0′,…,aN−1′},定义如下:
ai′=ai+kmodN XOR x
找出所有使得 a′ 等于 b 的所有对 (k,x)。
What is $\text{ XOR }$?
整数 A 与 B 的 XOR,记作 A XOR B,定义如下:
当 A XOR B 用二进制表示时,2k 位(k≥0)上的数字为 1 当且仅当 A 或 B 中恰有一个在该位上为 1,否则为 0。
例如,3 XOR 5=6。(二进制:011 XOR 101=110。)
输入格式
标准输入的格式如下:
N
a0 a1 ... aN−1
b0 b1 ... bN−1
输出格式
输出所有使得 a′ 与 b 相等的对 (k,x),每对占一行,按 k 的升序输出(对于相同 k 的对按 x 的升序输出)。
如果不存在这样的对,则输出应为空。
3
0 2 1
1 2 3
1 3
5
0 0 0 0 0
2 2 2 2 2
0 2
1 2
2 2
3 2
4 2
6
0 1 3 7 6 4
1 5 4 6 2 3
2 2
5 5
提示
1≤N≤2×105
0 \leq a_i,b_i < 2^{30}
输入中的所有数值均为整数。如果 (k,x)=(1,3),
a0′=(a1 XOR 3)=1
a1′=(a2 XOR 3)=2
a2′=(a0 XOR 3)=3
并且我们有 a′=b.
可能没有满足条件的对。
标签: AtCoder|abc150F
来源
AtCoder|abc150F