站外求助
  • 板块学术版
  • 楼主Ice_rnfmabj
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/22 10:58
  • 上次更新2024/7/22 10:59:26
查看原帖
站外求助
695943
Ice_rnfmabj楼主2024/7/22 10:58

小火龙和小鹦鹉在一个 n 行 m 列的网格上玩守护者游戏,网格中未被分配守护者的单元格由 0 表示,而已被分配守护者的单元格由1表示。已知网格的初始状态,在游戏的每个回合中两人都必须增加一名守护者,并且新增加的守护者不能与已有守护者出现在同一行或者同一列,当他们中的一人无法增加守护者时,游戏结束,他输了。

小火龙和小鹦鹉轮流增加守护者,并且小火龙率先开始,假设两人都处于最佳策略,请问谁可以赢得游戏。

如果小火龙赢了游戏,则输出“A”,否则输出“V”(不带引号)。

1≤n,m≤501 \le n,m \le 50

我85pts的die码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[51][51];
bool f;
void cz(int x,int y){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(i==x||j==y) a[i][j]=1;
        }
    }
    return;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]==1) cz(i,j);
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]==0){
                a[i][j]=1;
                cz(i,j);
                f=!f;
            }
        }
    }
    if(f) cout<<"A";
    else cout<<"V";
	return 0;
}
2024/7/22 10:58
加载中...