用脚找一下规律就会发现可以构成最后一项为全部异或和的循环节。 那么前缀异或就好了。 代码实现:
#include<cstdio>
using namespace std
;
int n
,m
,k
,z
;
long long a
[1000039],q
[1000039],ans
,x
,y
;
int main(){
register int i
;
scanf("%d",&k
);
for(i
=1;i
<=k
;i
++) scanf("%lld",&a
[i
]),a
[k
+1]^=a
[i
];
for(i
=1;i
<=k
+1;i
++) q
[i
]=q
[i
-1]^a
[i
];
scanf("%d",&m
);
k
++;
for(i
=1;i
<=m
;i
++){
scanf("%lld%lld",&x
,&y
);
x
--;
x
=x
%k
==0?k
:x
%k
;y
=(y
-1)%k
+1;
printf("%lld\n",q
[x
]^q
[y
]);
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-15163.html