【题目】http://codeforces.com/contest/1013/problem/B
【大意】数列a中有n个数,给定x,问经过多少次&运算(a里的一个和x)能让里面有2个相同的数。
【思路】水题差点翻车...有序查找我竟然写了个n^2....还好有大佬...
【代码】
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n,x;
scanf("%d%d",&n,&x);
int a[100005],b[100005];
int m=0;
int aa[100225]= {0},bb[100005]= {0};
int book[100005]= {0};
for(int i=0; i<n; i++)
{
int y;
scanf("%d",&y);
m=max(m,y);
a[i]=y;
book[y]=i;
//printf("%d %d\n",book[y],i);
aa[y]++;
}
for(int i=0; i<m+5; i++)
{
if(aa[i]>=2)
{
printf("0\n");
return 0;
}
}
for(int i=0; i<n; i++)
{
b[i]=a[i]&x;
}
for(int j=0; j<n; j++)
{
if(aa[b[j]]!=0&&book[b[j]]!=j)
{
// printf("%d\n",book[3]);
// printf("%d %d %d \n",book[b[j]],b[j],j);
printf("1\n");
return 0;
}
}
for(int i=0; i<n; i++)
{
bb[b[i]]++;
}
for(int i=0; i<m+5; i++)
{
if(bb[i]>=2)
{
printf("2\n");
return 0;
}
}
printf("-1\n");
}