Codeforces Round 563 D 前缀异或和

题意:构造数组a[],要求其子串异或不能为0或x

解法:连续子串异或和不为0或x,就是前缀和两两异或不为0或x。求出前缀和后,就能还原原数组。

        int n,x;
    scanf("%d%d",&n,&x); 
    int ans=0;
    n=(1<<n);
    for(int i=1;i<n;i++){
        if(!vis[i]&&i!=x){
            d[ans++]=i;
            vis[i^x]=1;
        }
    } 
    printf("%d\n",ans);
    for(int i=ans-1;i>=1;i--){
        d[i]^=d[i-1];
    }
    for(int i=0;i<ans;i++){
        printf("%d ",d[i]);
    }    

 

posted @ 2020-03-13 21:28  aaaaaaaaaaaaaa123  阅读(126)  评论(0)    收藏  举报