题意:
给出一个矩阵,可以对里面的元素做增加操作,询问能否使得每个元素的值恰好等于周围非零元素之和。
题解:
很简单的一道题,从上到下遍历整个矩阵,把每个元素的值增加为周围元素之和即可。不知道为什么比赛的时候死活想不到。。。
#include<bits/stdc++.h> using namespace std; const int maxn=1010; int X[4]={1,0,-1,0}; int Y[4]={0,1,0,-1}; int a[maxn][maxn]; int main () { int t; cin>>t; while (t--) { int n,m; int f=0; 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++) { int tt=0; for (int k=0;k<4;k++) { int tx=i+X[k]; int ty=j+Y[k]; if (tx<1||tx>n||ty<1||ty>m) continue; tt++; } if (a[i][j]>tt) { printf("NO "); f=1; break; } a[i][j]=tt; } if (f) break; } if (f) continue; printf("YES "); for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) printf("%d ",a[i][j]); printf(" "); } } }