找数2
#include<bits/stdc++.h>
using namespace std;
long long n, x, x1, y, ls, ls1;
long long lowbit(long long a){
return a & -a;
}
int main(){
scanf("%lld %lld", &n, &x);
ls1 = lowbit(x);
for(int i = 1; i <= n; i++){
scanf("%lld", &ls);
if(ls & ls1) x1 ^= ls;
else y ^= ls;
}
cout << (x1 < y ? x1 : y) << " " << (x1 > y ? x1 : y);
return 0;
}
找数3
#include<bits/stdc++.h>
using namespace std;
int n, x, ls, ls1 = 0, ls2 = 0, ls3;
int main(){
scanf("%d %d", &n, &x);
if(n % 4 == 0) x ^= n;
if(n % 4 == 1) x ^= 1;
if(n % 4 == 2) x ^= (n + 1);
if(n % 4 == 3) x ^= 0;
ls3 = x & (-x);
for(int i = 1; i <= n; i++){
scanf("%d", &ls);
if((ls & ls3) == ls3) ls2 ^= ls;
else if((ls & ls3) == 0) ls1 ^= ls;
}
for(int i = 1; i <= n; i++){
if((i & ls3) == ls3) ls2 ^= i;
else if((i & ls3) == 0) ls1 ^= i;
}
cout << (ls1 < ls2 ? ls1 : ls2) << " " << (ls2 > ls1 ? ls2 : ls1);
return 0;
}
以位运算为基础的两道很简单的题