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\n"); else { if(m==1) printf("BOB\n"); else printf("ALICE\n"); } } }