题意:

给两个的扫雷图,问能不能至多反转个格子,把图B的的空白区权值和变成和图A相同。

思路:

这题有浓厚的气息,可惜打的有点少,没做出来,一看代码秒懂。
既然是式的,样例必然是误导性的,就怕样例给好了让人一眼给看出来。
其实答案只要输出A的原图或者反图即可,选原图还是反图不难,原图和反图是互补的,B不能改成A的原图,那么就一定能改成反图,反之亦然。
下面证明反图的可性性:
非地雷单元中的数字之和其实就相邻格子(八个方向上的相邻)不同点对的个数,'.'和'X'对换后相邻格子上的点该不同的还是不同、该相同的还是相同,不影响非地雷单元中的数字之和。

MyCode:

#include <bits/stdc++.h>
using namespace std;
string A[1002],B[1002];
int main() {
    int n,m,pot,cnt=0;
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin>>n>>m;
    for(int i=1; i<=n; ++i) cin>>A[i];
    for(int i=1; i<=n; ++i) cin>>B[i];
    for(int i=1,j; i<=n; ++i) {
        for(int j=0; j<m; ++j) {
            if(A[i][j]!=B[i][j]) cnt+=1;
            else B[i][j]='X'+'.'-B[i][j];
        }
    }
    if((cnt<<1)<=n*m) for(int i=1; i<=n; ++i) cout<<A[i]<<endl;
    else for(int i=1; i<=n; ++i) cout<<B[i]<<endl;
}