K XOR Clique
BaoBao has a sequence a1,a2,...,an. He would like to find a subset S of {1,2,...,n} such that ∀i,j∈S, ai⊕aj<min(ai,aj) and ∣S∣ is maximum, where ⊕ means bitwise exclusive or.
Input
There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case:
The first line contains an integer n (1≤n≤105), indicating the length of the sequence.
The second line contains n integers: a1,a2,...,an (1≤ai≤109), indicating the sequence.
It is guaranteed that the sum of n in all cases does not exceed 105.
Output
For each test case, output an integer denoting the maximum size of S.
Sample Input
3
3
1 2 3
3
1 1 1
5
1 2323 534 534 5
Sample Output
2
3
2
题目意思是找出个满足ai⊕aj<min(ai,aj)的集合且这个集合的元素最多,输出这个最多的值就是结果
我们在纸上画画就会发现,只有二进制位数相同的情况下才会满足情况,那么只有求出每一位的对应的元素数量,然后输出最大的数量就是答案
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n;
int a[100005]={0};
scanf("%d", &n);
int k=0;
for (int i = 0; i < n; ++i)
{
int x,sum=0;
scanf("%d", &x);
while(x)
{
sum++;
x/=2;
}
a[sum]++;
}
for(int i=0;i<10000;i++)
{
k=max(k,a[i]);
}
printf("%d\n",k );
}
}