阶梯尼姆游戏
public class 阶梯尼姆博弈 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int caseNum = sc.nextInt();
int[][] data = new int[caseNum][];
for (int i = 0; i < caseNum; i++) {
int k = sc.nextInt();
data[i] = new int[k];
for (int j = 0; j < k; j++) {
data[i][j] = sc.nextInt();
}
}
for (int i = 0; i < caseNum; i++) {
String res = deal(data[i]);
System.out.println(res);
}
}
private static String deal(int[] A) {
int len = A.length;
Arrays.sort(A);//7 3 2 9 最坑之处
int res = 0;
if ((len&1)==1) { //判断长度是奇还是偶
for (int i = 0; i < len; i+=2) {
res ^= (i==0)?(A[0]-1):(A[i]-A[i-1]-1);
}
}else {
for (int i = 1; i < len; i+=2) {
res ^= (A[i] - A[i-1]-1);
}
}
if (res==0) {
return "Bob will win";
}else{
return "Georgia will win";
}
}
}
知识点:
举个简单例子:
int a = 2;
int b = 3;
a &=b相当于 a = a&b
2的二进制表示为10
3的二进制表示为11
它们直接&的话为10
还是为2
再来个例子:
7&1
7&1=0111&0001=0001=1