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

題意:給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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章