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
#include"bits/stdc++.h"
#define rep(i,j,k) for(int i=j;i<=k;i++)
using namespace std;
const int maxn = 1e5+5;
int a[maxn];
int max1=-1;
int bitcount(int x)
{
int res=0;
while(x!=0)
{
x>>=1;
res++;
}
return res;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
max1=-1;
rep(i,0,n-1)
{
cin>>a[i];
a[i]=bitcount(a[i]);
}
sort(a,a+n);
int ans=0,flag;
rep(i,0,n-2)
{
ans=0;
flag=0;
while(a[i]==a[i+1])
{
ans++;
i++;
flag=1;
}
if(flag)
i--;
if(max1<=ans)
max1=ans;
}
cout<<max1+1<<endl;
}
return 0;
}