CF1527 B1. Palindrome Game (easy version)

https://codeforces.com/contest/1527/problem/B1

题意:

有一个01回文字符串,两个人博弈,每次可以选择以下1种操作执行

1、把1个0变成1

2、若字符串不是回文串,且上一次没有执行操作2(按2个人一起算次数算的上一次),翻转字符串

当字符串变为全1时,谁执行的操作1次数少谁获胜

若0的个数有偶数个

可以得到后手立于不败之地,因为先手第一步只能执行操作1,后手在先手的对称位置跟着执行操作1,一定不会败。

后手可以在它最后一步的时候执行操作2,这样先手最后一步必须执行操作1,先手比后手多执行2次操作,后手获胜

若0的个数有奇数个,可以得出中间位置必为0

先手第一步把这个0变为1,然后就变成了上面的局面

这样先手之后会比后手少执行2次操作1,加上第1次,最终比后手少执行一次操作1,先手获胜

特判:若0只有1个,后手胜

#include<bits/stdc++.h>
 
char s[1003];
 
int main()
{
    int T,n,m;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        scanf("%s",s+1);
        m=0;
        for(int i=1;i<=n;++i)
            if(s[i]=='0') ++m;
        if(!(m%2)) printf("BOB
");
        else 
        {
            if(m==1) printf("BOB
");
            else printf("ALICE
");
        }
    }
}
作者:xxy
本文版权归作者和博客园共有,转载请用链接,请勿原文转载,Thanks♪(・ω・)ノ。
原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/15254083.html