题解 CF1362B 【Johnny and His Hobbies】

ShineEternal

2020-06-11 20:20:52

Solution

[更佳的阅读效果。](https://vipblog.github.io/_caeP72oh/) ## description: 给出 $n$ 个数字,让找出最小的正整数 $k$,使得这 $n$ 个数字异或 $k$ 之后,还是这 $n$ 个数字。(顺序不一定要相同 ## solution: 观察到数据范围并不大,故直接枚举 $k$ 从 $1\sim 1024$,可以在输入的时候就预处理出来每一种异或结果然后分别排序。 ## code: ```cpp #include<cstdio> #include<algorithm> using namespace std; int b[1030][1030],a[1030]; int main() { int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); for(int j=1;j<=1024;j++) { b[j][i]=a[i]^j; } } for(int i=1;i<=1024;i++) { sort(b[i]+1,b[i]+n+1); } sort(a+1,a+n+1); int tag=0; for(int i=1;i<=1024;i++) { int flag=0; for(int j=1;j<=n;j++) { if(b[i][j]!=a[j]) { flag=1; break; } } if(flag==0) { printf("%d\n",i); tag=1; break; } } if(tag==0)printf("-1\n"); } return 0; } ```