rt
f(0)=0
f(2∗x)=f(x)
f(2∗x+1)=f(x)+1
给n个数ai,统计有多少对数字函数值相同
n<=100000,ai<=1000000000
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
using namespace std;
ll in(){
char c = getchar();
int x = 0, f = 1;
for (; c < '0' || c > '9'; c = getchar())
if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar())
x = (x << 1) + (x << 3) + (c ^ 48);
return x * f;
}
int a[100005],ans;
bool f[1000000005];
void kkk(int x)
{
if(x<2)return ;
if(x%2==0)
{
if(f[x/2])ans++;
kkk(x/2);
}else
{
if(f[x/2-1])ans++;
kkk(x/2-1);
}
}
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
int t;scanf("%d",&t);
while(t--)
{
int n;scanf("%d",&n);
for(int i=0;i<n;i++)
{
a[i]=in();f[a[i]]=1;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
{
kkk(a[i]);
}
printf("%d\n",ans);
}
return 0;
}