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;
}