[bzoj4131]并行博弈_博弈论

并行博弈 bzoj-4131

题目大意题目链接

注释:略。


想法:我们发现无论如何操作都会使得$(1,1)$发生改变。

所以单个$ACG$的胜利条件就是$(1,1)$是否为黑色。

如果为黑色那么可以让它变成白的。接下来无论对手如何操作都可以通过翻转$(1,1)$使得进入对手回合。

那么多个$ACG$相加就是取异或和即可。

Code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
int main()
{
    int cases=rd(); while(cases--)
    {
        int ans=0;
        int T=rd(); while(T--)
        {
            int n=rd(),m=rd(); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
            {
                int x=rd(); if(i==1&&j==1) ans^=x;
            }
        }
        if(ans) puts("lyp win");
        else puts("ld win");
    }
    return 0;
}

小结:博弈论问题还是要善于观察问题啊!

原文地址:https://www.cnblogs.com/ShuraK/p/10106436.html