原题链接
题意:扫雷游戏,X表示雷,.表示无雷区,每个无雷区上面有一个数字,记录该位置处周围8个位置有多少个雷。现在给出A矩阵雷区和B矩阵雷区,它们无雷区数字之和为suma,sumb,要求(int)(nm/2)次将B矩阵雷区变化成sumb=suma
解题思路:
首先要找到一个规律就是,将一个矩阵的雷区全部变成无雷区,无雷区全部变为雷区,最后得到的sum相同。
然后去找A矩阵与B矩阵每一个位置处不同的数量cnt,如果cnt<=(int)(nm/2),则直接输出A矩阵即可。如果cnt>(int)(nm/2),则先将A矩阵变换为相反的矩阵,然后得到的cnt一定小于等于(int)(nm/2),所以直接输出A的变化矩阵即可
————————————————
版权声明:本文为CSDN博主「Buyi.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/littlegoldgold/article/details/111354354
#include <iostream>
using namespace std;
const int N = 1010;
char g1[N][N], g2[N][N];
int n, m;
int main() {
cin >> n >> m;
for (int i = 0; i < n; i ++) cin >> g1[i];
for (int i = 0; i < n; i ++) cin >> g2[i];
int judge = n * m / 2;
int cnt = 0;
for (int i = 0; i < n; i ++)
for (int j = 0; j < m; j ++) {
if (g1[i][j] != g2[i][j]) cnt ++;
}
if (cnt <= judge) {
for (int i = 0; i < n; i ++) cout << g1[i] << endl;
return 0;
}
for (int i = 0; i < n; i ++) {
for (int j = 0; j < m; j ++) {
if (g1[i][j] == '.') cout << 'X';
else cout << '.';
}
cout << endl;
}
return 0;
}