B.T.B.F.(博弈)
B.T.B.F.
Description
一年一度的Be The Best Foodie(BTBF)大赛开始了。现在已经到了最终决赛。Alice和Bob这对老冤家再次相遇。那么这次,将鹿死谁手呢!
BTBF的规则如下:场上将提供一把刀,nn块蛋糕。双方轮流执刀。执刀的一方先选择一块蛋糕,将其切成两份,而另一方则选择一份蛋糕吃掉,最后,执刀手将剩下的蛋糕吃掉。为了化简比赛规则,我们将每一块蛋糕的大小化作一个正整数,而蛋糕被切开之后,分成的两个蛋糕必须依然为正整数。没有蛋糕可切之时,则结束比赛。最后,吃的最多的人获胜。
Alice和Bob都是前所未有的高智商大胃王,每次都一定会做全局于自己最优的选择。
Alice先行执刀。
那么,现在当给出每块蛋糕的大小时,请你预言比赛的结果。
Input
第一行一个整数TT,代表有TT组数据。
每组数据格式如下:
第一行一个正整数nn,代表有nn块蛋糕。
第二行n个正整数a_iai,以空格间隔,代表每块蛋糕的大小。
\sum {n} \le 100000∑n≤100000 a_i \le 1,000,000,000ai≤1,000,000,000
Output
每组数据输出一行。若Bob吃得多,则输出“Bob”;反之则输出“Alice”。
Sample Input 1
3 1 2 1 3 2 2 2
Sample Output 1
Alice Bob Alice
注意:若蛋糕为1时 谁都不吃 ; 而两人吃的一样多的时候 Alice赢
记录奇偶蛋糕个数的奇偶,判断即可
#include<bits/stdc++.h> using namespace std; int main() { int T; scanf("%d",&T); int a[100005]; while(T--) { int n; scanf("%d",&n); int j=0,o=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); if(a[i]==1) continue; if(a[i]%2==0) o++; else j++; } if((o%2==0)&&(j%2)) { printf("Bob\n"); } else { printf("Alice\n"); } } return 0; }