[2020上海ICPC]B. Mine Sweeper II(构造+思维)

题目链接:http://codeforces.com/gym/102900/problem/B
题意:扫雷游戏,X表示雷,.表示无雷区,每个无雷区上面有一个数字,记录该位置处周围8个位置有多少个雷。现在给出A矩阵雷区和B矩阵雷区,它们无雷区数字之和为suma,sumb,要求(int)(nm/2)次将B矩阵雷区变化成sumb=suma
解题思路:
首先要找到一个规律就是,将一个矩阵的雷区全部变成无雷区,无雷区全部变为雷区,最后得到的sum相同。
然后去找A矩阵与B矩阵每一个位置处不同的数量cnt,如果cnt<=(int)(n
m/2),则直接输出A矩阵即可。如果cnt>(int)(nm/2),则先将A矩阵变换为相反的矩阵,然后得到的cnt一定小于等于(int)(nm/2),所以直接输出A的变化矩阵即可

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<math.h>
#include<string.h>
#include<string>
using namespace std;
#define ll long long
const int mod = 1e9 + 7;
int n, m;
char a[1100][1100];
char b[1100][1100];
int maxt;
int cnt;
int main() {
	scanf("%d%d", &n, &m);
	maxt = n * m / 2;
	for (int i = 0; i < n; i++) 
			scanf("%s", a[i]);
	for (int i = 0; i < n; i++) 
		scanf("%s", b[i]);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (a[i][j] != b[i][j])
				cnt++;
		}
	}
	if (cnt <= maxt) {
		for (int i = 0; i < n; i++)
			printf("%s\n", a[i]);
	}
	else {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				if (a[i][j] == '.')
					printf("X");
				else
					printf(".");
			}
			printf("\n");
		}
	}
	return 0;

}
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Buyi.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值