题意:
给两个的扫雷图,问能不能至多反转个格子,把图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; }