其他分享
首页 > 其他分享> > 2020ICPC济南热身赛 B-Four Xor【鸽巢原理+暴力】

2020ICPC济南热身赛 B-Four Xor【鸽巢原理+暴力】

作者:互联网

题意

给出一个序列 \(A_{1\dots n}\),问是否存在 \(4\) 个整数 \(1\leq x<y<z<w \leq n\),使得 \(A_x⊕A_y⊕A_z⊕A_w=0\)。输入保证 \(∀ i \neq j\),\(A_i\neq A_j\)。\(4\leq n \leq 10^5,0\leq A_i \leq 10^5\)。
题目链接:https://ac.nowcoder.com/acm/contest/10657/B

分析

由于 \(0\leq A_i\leq 10^5\),必然有 \(A_i⊕A_j \leq 2\times 10^5\),而且由于 \(A\) 中每个数都不同,必然不会出现 \(A_x⊕A_y=A_x⊕A_z\) 的情况。因此,\(n^2\) 枚举并标记,虽然枚举的范围很大,但实际的枚举范围只有 \(2\times 10^5\),不会超时。

代码

#include <bits/stdc++.h>

using namespace std;
const int N=1e5+5;
const int maxn=2e5+5;
typedef pair<int,int> pii;
int a[N];
bool d[maxn];
int main()
{
    int n,f=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            int tmp=a[i]^a[j];
            if(d[tmp])
            {
                f=1;
                break;
            }
            d[tmp]=1;
        }
    }
    if(f) printf("Yes\n");
    else printf("No\n");
    return 0;
}

标签:10,Xor,int,Four,leq,枚举,2020ICPC,maxn,const
来源: https://www.cnblogs.com/1024-xzx/p/14353032.html