题解
对于一个数,我们将其转换成二进制,然后补零到31位
我们发现,能和数x配对的数只有一个,那就是 按位翻转后的x,即x和 \(2^{31}-1\) 异或的值
所以我们要找有没有能互相配对的值,以及组数,配对用map?
code
#include<bits/stdc++.h>
using namespace std;
const int val=2147483647;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,x;
int ans=0;
cin>>n;
map<int,int> q;
for(int i=1;i<=n;i++)
{
cin>>x;
int y=x^val;
if(q[y])q[y]--;
else q[x]++,ans++;
}
cout<<ans<<endl;
}
return 0;
}
标签:Vlad,val,Division,int,map,ans,配对
From: https://www.cnblogs.com/pure4knowledge/p/18041502