题解:P8034 [COCI2015-2016#7] Ozljeda

· · 题解

思路:可以利用前缀和来解决。

因为 x \oplus 0 = x , x \oplus x = 0 ,

所以 \bigoplus_{i=l}^r x_i = (\bigoplus_{i=1}^{l-1} x_i) \oplus (\bigoplus_{i=1}^{r} x_i)

有了这个公式,这道题就可以轻松解决。

代码如下:

#include <bits/stdc++.h>
using namespace std;
long long k,a[100010],q,l,r;
int main(){
    cin>>k;
    for (int i=1;i<=k;++i){
        cin>>a[i];
        a[i]^=a[i-1];
    }
    cin>>q;
    while (q--){
        long long l,r,ans=0;
        cin>>l>>r;
        l--;
        l%=(k+1);
        r%=(k+1);
        cout<<(a[r]^a[l])<<endl;
    }
    return 0;
}