CF 424C Magic Formulas

来源:互联网 发布:什么借钱软件最靠谱 编辑:程序博客网 时间:2024/06/05 18:24

由于异或满足交换律,对于(1-n)%k (k=1,2,3..)

有n/i个(0 - k-1)和1个(0 - n%k)

方法1:区间操作num[i]表示前i个数都加上某一值。

方法2:预处理xor[i]表示1-i的异或值。根据n/i是否是奇数异或

#include<iostream>#include<cstdio>using namespace std;int num[1000005];int main(){    int n,ans=0,tt;    cin>>n;    for(int i=1;i<=n;i++){        int t=n/i;        int p=n%i;        if(t&1){            //for(int j=p+1;j<i;j++)            //  ans^=j;            num[p+1]++;            num[i]--;        }        else{            //for(int j=0;j<=p;j++)            //  ans^=j;            num[0]++;            num[p+1]--;        }    }    for(int i=1;i<=n;i++){        num[i]+=num[i-1];        if(num[i]&1)            ans^=i;    }    for(int i=1;i<=n;i++){        scanf("%d",&tt);        ans^=tt;    }    cout<<ans<<endl;    return 0;}


0 0