题目
题意:给定
x
,
y
x,y
x,y和长度为
n
n
n的数组
a
a
a。给定两个数
x
,
x
+
3
x,x+3
x,x+3,从左到右,
1
<
=
i
<
=
n
1<=i<=n
1<=i<=n对于数组每个数
a
i
a_i
ai,进行
d
=
d
+
a
i
d=d+a_i
d=d+ai,或者
d
=
d
⨁
a
i
d=d \bigoplus a_i
d=d⨁ai,来更新x,x+3(两者是相互独立的)。最终x或者x+3能得到y。问是x(Alice)还是x+3(Bob)。数据保证,x,x+3,有且只有一个能得到y。
思路:观察加法和异或的共同点,我们发现,对于任意的整数a,b
奇偶性(a+b)=奇偶性(a^b)
因此,如果答案是x,那么x与
a
1
,
a
2
,
.
.
.
a
n
a_1,a_2,...a_n
a1,a2,...an的加法、异或运算后,奇偶性与y相同;否则答案是x+3。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 200010;
int n, x;
int a;
ll y;
void solve() {
scanf("%d%d%lld", &n, &x, &y);
ll res = (y + x) % 2;
for (int i = 0; i < n; ++i) {
scanf("%d", &a);
res = (res + a) % 2;
}
printf("%s\n", (!res) ? "Alice" : "Bob");
}
int main() {
int t;
scanf("%d", &t);
while(t--) {
solve();
}
return 0;
}