2020 ICPC 亚洲区域赛 上海站

遇到If multiple solutions exist, print any of them.

不要相信题目给的测试

B Mine Sweeper II

讲解
题意:
给两个n×m的扫雷图,每个坐标: 雷用X表示,非雷用·表示。

如果某格子不是雷,那么该点的权值是:周围8个格子中,雷的数量。
求解:
改变下面图不超过(m×n)/2次操作(每次操作 = 雷变成数字 / 者数字变成雷),使得下面的权值和等于上面的图权值和。

思路:
统计一下两图的差别,如果超过(m×n)/2就把上面的图反转,
否则就输出上面的图。
因为图是互补的时候,数字也是相等的。
代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1010;
int n,m;
char a[N][N];
char b[N][N];

int main()
{
    cin>>n>>m;
    int i,j;
    for(i=0;i<n;i++) cin>>a[i];
    for(i=0;i<n;i++) cin>>b[i];
    int cnt=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(a[i][j]!=b[i][j]) cnt++;
        }
    }
    if(cnt<=n*m/2)
        for(i=0;i<n;i++)
    {
        cout<<a[i]<<endl;
    }
    else
        for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(a[i][j]=='.') cout<<"X";
            else cout<<".";
        }
        cout<<endl;
    }
    return 0;
}

posted @ 2021-10-07 20:18  kingwzun  阅读(120)  评论(0编辑  收藏  举报