题意
给出一个序列 \(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;
}