Palindrome Game (easy version) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目给定一个回文串!!!
如果当前不是回文串,且上一个人没有翻转的情况下,当前这个人可以翻转
或者将 0->1 消耗1点能量
首先确定最开始有偶数个0的情况为 先手必败态 (假设第一个人取其中一个0进行操作,另一个人在另一半段的对应的0进行操作,最后剩下2个0的时候,先手操作完,当前串不是回文串可以翻转,后手会少先手2点能量消耗)
如果0的个数 只有1个 先手也是必败状态,应该这个0肯定在中间的位置,第一次先手必须消耗能量
剩余的情况 就是 有奇数个0,且0的个数 > 1
先手先操作中间的0,将必败态甩个对手,后手必败
#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <set>
#define x first
#define y second
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
typedef pair<int,int> PII;
typedef pair<char,int> PCI;
typedef long long LL;
//typedef __int128 i128;
typedef unsigned long long ULL;
const int N=2e5+10,INF = 1e9 ;
const double eps = 1e-7;
int n;
void solve()
{
string s;
cin >> n>> s;
int zero =0;
for(int i=0; i < n ;i ++ )if(s[i] == '0') zero ++ ;
if(zero & 1 && zero > 1 )
cout <<"ALICE\n";
else
cout << "BOB\n";
}
int main()
{
// freopen("1.txt","r",stdin);
ios
LL T=1;
cin>>T;
while(T -- )
{
solve();
}
return 0;
}