题解:CF2030C A TRUE Battle

· · 题解

博弈论。

同时,因为 and 比 or 的优先级高。

那么,Alice 可以将 or 放在两个连续的 1 之间,这样的话,Alice 的表达式的值总有一边为 1。然后无论 Bob 接下来把 and 放在哪里,Alice 在神之一手,直接抬走。然后,如果所以如果 Alice 能够在两个 or 中间放置一个结果为真的表达式,那么 Alice 就能将 Bob 直接抬走,那我们知道 or 想要值为真只要一边为 1 就够了,所以直接在一个 1 的两旁放 or 就能神之一手,直接抬走了。

最后,如果头尾均没有 1 切没有相邻的 1,那么这个时候,如果 Alice 把 or 放在一个 1 的一侧,那么 Bob 可以在另一侧放 and,因为 and 的优先级比 or 高,所以最后表达式会为假。所以当且仅当上述两种条件下,Alice 才能获胜。

代码:

//By Wide_Master
#include<bits/stdc++.h>
using namespace std;
int T,n,f;
string s;
signed main()
{
    cin>>T;
    while(T--){
        cin>>n;
        cin>>s;
        s=" "+s;
        f=0;
        if(s[1]=='1'||s[n]=='1'){
            puts("YES");
            continue;
        }
        for(int i=1;i<n;i++){
            if(s[i]=='1'&&s[i+1]=='1'){
                f=1;
                break;
            }
        }
        if(f) puts("YES");
        else puts("NO");
    }
}