题意

  • n堆石子,可以做两种操作
    1. 对一个奇数堆石子拆分成两堆
    2. 合并两个偶数堆石子
  • 无法操作的人判负,给定n和每堆石子个数,判断胜负

思路

  • 如果没有偶数且奇数不全是1,A分解,B分解,A合并,B分解——A必胜
  • 如果有偶数,所有奇数没有贡献,能合并cnt_even-1次

代码

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin >> n;
    int cnt=0;
    int flg=0;
    for(int i=0;i<n;i++){
        int tmp;
        cin >> tmp;
        if(tmp%2==0) cnt++;
        else if(tmp>=3) flg=1;
    }
    if(cnt>0){
        cout << ((cnt-1)%2?"Alice":"Bob") << endl;
    }else{
        cout << (flg?"Alice":"Bob") << endl;
    }
    return 0;
}