3.31 每日一题题解

Posted qfnu-acm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.31 每日一题题解相关的知识,希望对你有一定的参考价值。

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 每日一题题解的主要内容,如果未能解决你的问题,请参考以下文章

算法·每日一题(详解+多解)-- day14

寒假每日一题总结(第七天)

寒假每日一题总结(第十五天)

寒假每日一题回文平方(个人练习)详细题解+推导证明(第五天)

3.31每日总结

Java每日一题——>739. 每日温度(蛮力法,栈方法)

(c)2006-2024 SYSTEM All Rights Reserved IT常识