游戏的胜负跟先手有很大关系,先从简单的开始:当只有一堆时,先手可以直接取胜;当有两堆时,当第一堆x1>1时,先手可以取x1-1个,这样后手只能取第一堆剩下的1个,但是当第一堆只有1个时,先手只能取剩下的一个。

那么现在给定一个常规情况,比如3 1 2 1

我们可以反着来,对于先手来说,他一定想取最后一堆(4堆)来获胜,那么3堆的最后一定要由后手来取,这里我们看到3堆=2,那么先手可以在轮到3堆的时候取x3-1个也就是1个,保证3堆的最后是后手来取,那么2堆的最后一定要是后手来取,观察到2堆=1,那么轮到1堆的时候先手就需要把1堆的全部取走。

现在再来一个情况 3 1 1 1 反着来,我们可以得到

1.先手1堆取2个

2.后手只能取1堆剩下1个

3.先手取2堆的1个

4.后手取3推的1个

5.先手取4堆的一个

看到这里我们就知道"先手"肯定能赢,先手选择性的取当前堆的所有或者当前堆的元素个数-1个,从而限制后手。

但是注意这里的先手并不是谁先开始选择谁就是先手,比如对于上面的情况3 1 2 1我们已经知道先手肯定赢,但是如果是这种情况呢

1 3 1 2 1,先手无论如何只能取第一堆中的1个,从而让出了先手,后手也就成了游戏的主导。

但如果是1 1 3 1 2 1,先手后手都只能取1堆中的个和2堆中的1个,这样先手也就不变了。

由此我们可知对于前面连续的元素个数是1的堆,会影响谁是真正的先手。所以我们需要找到真正的先手,这里可以把特殊情况处理一下,也就是所有堆的元素全为1的情况,之后找到真正的先手,那么真正的先手也就能获胜。

#include<bits/stdc++.h>

using namespace std;

void solve(){

    int n;

    cin>>n;

    vector<int>a(n);

    for(int i=0;i<n;i++){

        cin>>a[i];

    }

    int index=0;

    while(index<n&&a[index]==1){

        index++;

    }

    if(index>=n){

        if(index%2==0){

            cout<<"Bob"<<endl;

        }

        else{

            cout<<"Alice"<<endl;

        }

    }

    else{

        if(index%2==0){

            cout<<"Alice"<<endl;

        }

        else{

            cout<<"Bob"<<endl;

        }

    }

    return ;

}

int main(){

     int t;

     cin>>t;

     while(t--){

        solve();

     }

     return 0;

}