xor是满足交换律的,展开后发现仅仅要能高速求出 [1mod1....1modn],....,[nmod1...nmodn]的矩阵的xor即可了....然后找个规律
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; int XOR[1100000]; int main() { int ans=0,n; scanf("%d",&n); for(int i=0;i<n;i++) { int p; scanf("%d",&p); ans^=p; } for(int i=1;i<=n-1;i++) { XOR[i]=XOR[i-1]^i; int len=i+1; int res=n%(len*2); if(res>=len) { ans^=XOR[i]; res-=len; } ans^=XOR[res]; } printf("%d ",ans); return 0; }