1 条题解

  • 0
    @ 2021-6-15 13:33:57

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int c[1000001][2],s[100001],a[100001],ans;
    int pw[21],n;
    void add(int x,int y)
    {
      while (x<=1000000)
        {
          c[x][y]++;
          x+=(x&(-x));
        }
    }
    int query(int x,int y)
    {
      int sum=0;
      while (x)
        {
          sum+=c[x][y];
          x-=(x&(-x));
        }
      return sum;
    }
    int main()
    {int i,j,flag,cnt;
      cin>>n;
      for (i=1;i<=n;i++)
        {
          scanf("%d",&s[i]);
          s[i]+=s[i-1];
        }
      pw[0]=1;
      for (i=1;i<=20;i++)
        pw[i]=pw[i-1]*2;
      for (i=0;i<=20;i++)
        if (pw[i]<=s[n])
          {
        memset(c,0,sizeof(c));
        flag=0;
        add(1,0);
        for (j=1;j<=n;j++)
          {
            int tmp=s[j]&pw[i];
            if (tmp) cnt=query(a[j]+1,0)+query(1000001,1)-query(a[j]+1,1);
            else cnt=query(a[j]+1,1)+query(1000001,0)-query(a[j]+1,0);
            if (cnt%2==1) flag^=1;
            add(a[j]+1,(bool)tmp);
            if (tmp) a[j]|=pw[i]; 
          }
        if (flag) ans|=(pw[i]);
          }
      cout<<ans;
    }
    
    • 1

    信息

    ID
    943
    时间
    1000ms
    内存
    64MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者