码迷,mamicode.com
首页 > 其他好文 > 详细

3.31 每日一题题解

时间:2020-03-31 10:51:35      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:运算   异或运算   namespace   dad   names   +=   include   超时   pac   

Arpa’s obvious problem and Mehrdad’s terrible solution

涉及知识点:

  • 数学

solution:

  • 题意就是让你找出给定数列里两两异或值为x的组合个数
  • 暴力n方,会超时
  • 根据异或运算性质:a^b=x; x^a=b; x^b=a;
  • 所以可以直接O(n)的遍历每一个数,查找x异或这个数是否存在即可

std:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 1e6 + 10;
int a[maxn],sum[maxn];
int main()
{
    int n,x,y,z;
    ll ans = 0;
    cin>>n>>x;
    for(int i=0;i<n;i++)cin>>a[i];
    for(int i=0;i<n;i++){
        z = x^a[i];
        if(sum[z])
            ans += 1ll*sum[z];
        sum[a[i]]++;
    }
    cout<<ans<<endl;
    return 0;
}

3.31 每日一题题解

标签:运算   异或运算   namespace   dad   names   +=   include   超时   pac   

原文地址:https://www.cnblogs.com/QFNU-ACM/p/12603321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!