Codeforces Round #383 (Div. 2)B -Arpa's loud Owf and Mehrdad's evil plan

来源:互联网 发布:安全知识网络答题 编辑:程序博客网 时间:2024/06/09 20:24

题意:

给定n个数字 和一个x,接下来有n个数字,问数字两两组合,可以有多少情况 两个数字异或等于x

思路:

a^b=c    --->   b=  c^a

PS:信心满满的过题,然而把int 开成long long 了。心疼

注意0的特判

#include <iostream>#include <stdio.h>#include <cstring>#include <algorithm>#include <queue>using namespace std;typedef long long ll;long long a[1000005];long long b[1000005];int main(){    //cout<<(5^1)<<endl;    int n,x;    scanf("%d%d",&n,&x);    for(int i=1;i<=n;i++)    {        int t;        scanf("%d",&t);        b[t]++;        a[t]=1;    }    if(x!=0)    {    unsigned long long ans=0;    for(int i=1;i<=1000005;i++)    {        if(a[i]==0)            continue;        int aim=(x^i);        if(aim>1e+5)            continue;        if(a[aim])        {            a[aim]=0;            ans+=(b[i]*b[aim]);        }    }    cout<<ans<<endl;    }    else    {        unsigned long long ans=0;        for(int i=1;i<=1000005;i++)        {            if(a[i])            ans+=(b[i]-1)*(b[i])/2;        }        cout<<ans<<endl;    }    return 0;}


0 0
原创粉丝点击