d为1代表Alice执刀,-1代表Bob执刀
记录蛋糕数字为奇数和偶数各自的数量,先看偶数块
如果为偶数的蛋糕为奇数块,则为偶数的蛋糕切完后是Bob持刀,Alice会多吃1,此时要将奇数块蛋糕-1(假设此时有为奇数的蛋糕,如果没有根据题意依然是Alice赢)
如果为奇数的蛋糕为奇数块,两人每次切时对方都会多1,,中和后即对2取余,若取余结果为0说明两人在这一部分吃的一样多,否则Alice会多持刀一次,Bob会多吃1
最后,如果Bob吃得多,Bob赢,反之(包括平局),Alice赢
且若有蛋糕数字为1时,这是“不能切的蛋糕”,不算入计数
1 #include<stdio.h> 2 int main(){ 3 int T,t,n,i,d,d0,d1,s; 4 while(scanf("%d",&T)!=EOF) 5 for(t=0;t<T;t++){ 6 scanf("%d",&n); 7 s=d0=d1=0; 8 for(i=0;i<n;i++){ 9 scanf("%d",&d); 10 if(d==1) 11 continue; 12 if(d%2) 13 d1++; 14 else 15 d0++; 16 } 17 if(d0%2&&d0>0)//如果为偶数的蛋糕为奇数块,Alice会吃得多 18 d1--,s++; 19 if(d1%2&&d1>0)//如果为奇数的蛋糕为奇数块,Bob会吃得多 20 s--; 21 if(s<0) 22 printf("Bob\n"); 23 else 24 printf("Alice\n"); 25 } 26 27 return 0; 28 }