题解 CF1365A 【Matrix Game】

ShineEternal

2020-06-08 19:16:48

Solution

[更佳的阅读效果](https://vipblog.github.io/uvPUTnSVv/)。 ## description: - 给定一个 $n\times m$ 的矩阵,有一些格子是 $1$,有一些格子是 $0$。 - Ashish 和 Vivek 轮流往矩阵中放 $1$。某个格子可以放 $1$ 当且仅当这个格子所在的行和列没有 $1$。 - 最后无处放 $1$ 的玩家就输了。你需要输出赢家的姓名。 - 多组数据,数据组数不超过 $50$, $1\le n,m\le 50$。 - translate by @[ShineEternal](https://www.luogu.com.cn/user/45475)。 ## solution: 这道题目 $n,m$ 的范围较小,所以直接模拟即可。 由于先后顺序并没有影响,故按顺序添加就好。 在添加 $1$ 的时候记录下当前是谁走的。可以使用 ``TUrn=(TUrn+1)%2;`` 类似的标记器。 ----- update soon: 突然发现其实取出空行和空列的最小值判断奇偶性就行了。 ## code: ```cpp #include<cstdio> #include<cstring> using namespace std; int a[55][55]; int x[55],y[55]; int main() { int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&a[i][j]); if(a[i][j]==1) { x[i]=1; y[j]=1; } } } int TUrn=1; for(int i=1;i<=n;i++) { if(x[i]==0) { int flag=0; //x[i]=1; for(int j=1;j<=m;j++) { if(y[j]==0) { y[j]=1; flag=1; break; } } if(flag==1) { x[i]=1; TUrn=(TUrn+1)%2; } } } if(TUrn==1) { printf("Vivek\n"); } else { printf("Ashish\n"); } } return 0; } ```