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]); }

浙公网安备 33010602011771号