题意:ALICE先手,每次能对一个字符串做两种操作:
选择任意i(1≤i≤n),其中s[i]= '0',将s[i]改为'1'。支付1美元。
把整个字符串反过来,付0元。此操作只允许在字符串当前不是回文且上次操作没有反转的情况下进行。也就是说,如果Alice翻转了串,那么Bob在下一个动作中就不能翻转,反之亦然。
二人足够聪明,问给定一个 回文串 ,谁花的钱数最少。平局输出DRAW.
考虑1.长度奇数且中间为'0'的串和2.其他类型的串。
对于2.统计左半边0的个数.
(1)个数为1,BOB翻转即可让自己必胜,且BOB比ALICE少花2美元。
(2)个数大于1,每次ALICE怎么填,BOB就对着填,能转化为情况(1),还是BOB必胜。
对于1.统计包括中心的左半边的0的个数.
(1)只有中心是0,BOB必胜。
(2)除了中心还有别的地方为0,ALICE起手填中间的0,变为BOB先手的情况2.,此时,之后一定是BOB比ALICE多花2美元,总共是ALICE比BOB少花1美元,故ALICE必胜。
```
#include<bits stdc++.h>
#define ll long long
using namespace std;
string s;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t,n,cnt=0;
cin>>t;
while(t--)
{
cin>>n;//cin>>s;
cin>>s;
cnt=0;
for(int i=0;i