题解 CF1362B 【Johnny and His Hobbies】
ShineEternal
2020-06-11 20:20:52
[更佳的阅读效果。](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;
}
```