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;
}
posted @ 2022-06-11 14:59  A_zjzj  阅读(20)  评论(0编辑  收藏  举报