题目描述
- 游戏题,给一个只有
0
0
0和
1
1
1的回文串,对每一个人有两种操作:1、将这个串中任意的
0
0
0变成
1
1
1。2、如果当前串是非回文状态,可以将
0
0
0和
1
1
1排序。
- 问最后谁会赢这场比赛。
思路分析
- 由于一开始就是回文串,那么对于Alice来说,只要她选了任意的一个
0
0
0变成
1
1
1,那么Bob来说,总能找到和她选的
0
0
0对称的
0
0
0,所以Bob必胜,因为Bob可以在最后一回合选择第二种操作。
- 然后就是特殊情况,比如只有一个
0
0
0,那么肯定是Bob赢。奇数个
0
0
0,那么就证明这个
0
0
0是在中心位置,Alice一开始就把这个中心位置变成
1
1
1,就和上面一个点一样了,所以是Alice胜。
- 总结一下,如果只有偶数个
0
0
0,那么Bob必胜,奇数个
0
0
0(除
1
1
1个以外)是Alice赢。
代码如下
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
string s;
cin >> s;
int cnt = 0;
for (int i = 0; i < n; i++)
{
if (s[i] == '0')
cnt++;
}
if (cnt % 2)
{
if (cnt > 1)
{
cout << "ALICE" << endl;
}
else
cout << "BOB" << endl;
}
else
cout << "BOB" << endl;
}
return 0;
}