1. 程式人生 > 其它 >CF1451F-Nullify The Matrix【結論題,博弈論】

CF1451F-Nullify The Matrix【結論題,博弈論】

技術標籤:博弈論結論題Codeforces結論題博弈論

正題

題目連結:https://www.luogu.com.cn/problem/CF1451F


題目大意

n ∗ m n*m nm的網格,每個網格上有數字,先後手輪流操作

每次操作選擇一個只有往右和往下的路徑,讓第一個格子減去一個正整數並且隨意修改後面的格子。要求完成後所有格子非負,無法操作者輸,求先手能否必勝。


解題思路

我們每一斜列分開考慮,即 x + y x+y x+y相同的格子歸為一類。

那麼一類的格子操作時可以隨意修改後面類格子的異或和,也就算一類的格子的最後一手可以決定後面類的勝負。

但是我們可以通過選擇下面的格子來轉換先後手,但是這麼做同理後手也可以這麼做,所以只有所有類的異或和都為 0 0

0時,先手一旦操作就會使得至少有一個類為正,然後後手必勝。否則先手都是必勝的。


c o d e code code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int T,n,m,a[11000];
int main()
{
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&m);
        for(int i=1;
i<n+m;i++)a[i]=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ int x;scanf("%d",&x); a[i+j-1]^=x; } bool flag=0; for(int i=1;i<n+m;i++) if(a[i]){flag=1;break;} if(flag)printf("Ashish\n"
); else printf("Jeel\n"); } return 0; }