当前位置: 代码迷 >> 综合 >> 【CodeForces - 769D】k-Interesting Pairs Of Integers(思维、暴力)
  详细解决方案

【CodeForces - 769D】k-Interesting Pairs Of Integers(思维、暴力)

热度:36   发布时间:2023-12-06 19:30:04.0

题意:给N个小于1e4的数,问有多少<ai,aj>满足i<j且ai异或aj正好有k位1.

思路:处理处k位1的数有哪些,最多3400左右,枚举每一个ai,再枚举k位1的数,看异或后的数有多少个。

ac代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#include<unordered_map>
#include<set>
#include<string>
#include<vector>
using namespace std;
typedef long long ll;
const int maxn=100100;
int a[maxn],b[maxn],n,k,vv[maxn],tot=0;
int main(){cin>>n>>k;for(int i=1;i<=n;i++){scanf("%d",&a[i]);b[a[i]]++;}ll res=0;int up=16384;for(int i=0;i<=up;i++){int x=i,num=0;while(x){num+=x&1;x/=2;}if(num==k)vv[tot++]=i;}for(int i=1;i<=n;i++){for(int j=0;j<tot;j++){res+=b[vv[j]^a[i]];}b[a[i]]--;}if(k==0)res-=n;printf("%lld\n",res);return 0;
}