Codeforces Round #647 (Div. 2) - Thanks, Algo Muse! 参与排名人数12044
[codeforces 1362B] Johnny and His Hobbies 异或+排序
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1362/problem/B
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
B - Johnny and His Hobbies | GNU C++17 | Accepted | 46 ms | 200 KB |
样例说明如下
4
1 0 2 3
原数组排序后 0 1 2 3
与1异或后 1 0 3 2
与1异或后排序 0 1 2 3
发现两个数组相同,
故输出1
题目反复强调1024,基本可以断定,最小整数是不会超过1024
AC代码如下
#include <cstdio>
#include <algorithm>
#define maxn 1100
using namespace std;
int a[maxn],b[maxn];
int main(){
int t,n,i,j,flag=0;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
sort(a+1,a+1+n);//自小到大排序
for(i=1;i<=1024;i++){//自小到达枚举
flag=0;
for(j=1;j<=n;j++)b[j]=a[j]^i;//计算异或后的新数组
sort(b+1,b+1+n);//自小到大排序
for(j=1;j<=n;j++)
if(b[j]!=a[j]){flag=1;break;}//找不同
if(!flag)break;
}
if(!flag)printf("%d\n",i);
else printf("-1\n");
}
return 0;
}