码迷,mamicode.com
首页 > 其他好文 > 详细

ICPC2021上海区域赛 B.Mine Sweeper II(思维、构造)

时间:2021-06-13 10:59:35      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:就是   ret   cout   题目   ref   规律   pre   href   namespace   

  • 题目:Mine Sweeper II
  • 题意:"."代表该位置八个方向(北、东北、东、东南、南、西南、西、西北)‘X‘的个数,给出矩阵A(n * m),矩阵B(n * m),问B矩阵最多翻转cnt = (n * m) / 2次是否可以满足其矩阵值("."的值之和) = 矩阵A的值,不能满足则输出"-1", 可以满足则输出翻转后的矩阵B.
  • 解析:首先,需要发现一个规律,就是矩阵A的逆(将"*"翻转成"X","X"翻转成"."),该矩阵的值不变;
    1. 若矩阵A与矩阵B元素相差的个数小于cnt个,那么可以直接输出A矩阵,因为B矩阵可以直接转换成矩阵A;
    2. 反之,A的矩阵所有元素进行翻转后输出,因为A的矩阵所有元素进行翻转后的A‘,此时A‘的值与A一样,但这时候A‘与B矩阵元素相差的个数就小于cnt个.
  • 代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
char a[N][N], b[N][N];
int n, m, cnt = 0;
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++)
        {
            cin >> b[i][j];
            if(a[i][j] != b[i][j]) cnt ++;
        }
    }
    if(cnt <= (n * m) / 2)
    {
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= m; j++)
            {
                cout << a[i][j];
            }
            cout << endl;
        }
    }
    else
    {
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= m; j++)
            {
                if(a[i][j] == ‘.‘) a[i][j] = ‘X‘;
                else a[i][j] = ‘.‘;
                cout << a[i][j];
            }
            cout << endl;
        }
    }
    return 0;
}

ICPC2021上海区域赛 B.Mine Sweeper II(思维、构造)

标签:就是   ret   cout   题目   ref   规律   pre   href   namespace   

原文地址:https://www.cnblogs.com/K2MnO4/p/14879381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!