CF1451F-Nullify The Matrix【結論題,博弈論】
阿新 • • 發佈:2020-12-31
正題
題目連結:https://www.luogu.com.cn/problem/CF1451F
題目大意
n ∗ m n*m n∗m的網格,每個網格上有數字,先後手輪流操作
每次操作選擇一個只有往右和往下的路徑,讓第一個格子減去一個正整數並且隨意修改後面的格子。要求完成後所有格子非負,無法操作者輸,求先手能否必勝。
解題思路
我們每一斜列分開考慮,即 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;
}