QZEZOJ 梦境题解--zhengjun
其实不难,手推一下就发现规律:
\(X_{m(k+1)+1}=A_1\)
\(X_{m(k+1)+2}=A_2\)
\(\cdots\)
\(X_{m(k+1)+k}=A_k\)
\(X_{m(k+1)}=A_1 ⊕A_2⊕\cdots⊕A_k\)
所以代码就不难了。
#include<cstdio>
using namespace std;
int n;
long long a[100002],sum,s1[100002];
long long l,r;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]),sum^=a[i];
a[++n]=sum;
for(int i=1;i<=n;i++)s1[i]=s1[i-1]^a[i];
int T;
scanf("%d",&T);
while(T--){
scanf("%lld%lld",&l,&r);
l%=n;r%=n;
if(!l)l=n;
if(!r)r=n;
printf("%lld ",s1[r]^s1[l-1]);
}
return 0;
}