输入是一个布尔数组a_0,i
,最多有1000,000个元素。
每次新数组由前一个数组中xor
个相邻(循环)元素组成时:
a_t,i = a_t-1,i ^ a_t-1,(i+1)%n // n is size of input
需要第p个数组(a_p,i)。(p <= 1000,000,000)。
根据p
的上限,我想可能有一个数组结构,或者数组可以在O(lg(p) * n)
中计算。
答案 0 :(得分:2)
如果t是2的幂(t = 2 k ),
a_t,i = a_0,i ^ a_0,(i+t)%n
此外,如果t是两个分量的总和,其中一个是2的幂(t = v + w,w = 2 m ),
a_t,i = a_v,i ^ a_v,(i+w)%n
这允许使用p的二进制表示来递归地计算结果数组。复杂性按要求:O(lg(p)* n):
shift = 1;
while (p != 0)
{
if (p&1)
a ^= a.rotate(shift);
shift *= 2
p /= 2
}