B. Neighbor Grid
题意:
一个n×m大的网格里,每个网格里都有一个值,你可以使得任意网格里的数字加一,网格里的数字X代表这个网格附近恰好有X个网格里的值不为0的网格相邻(有相同边才相邻)
思路:
暴力暴力暴力,全部网格的值全部改为邻近网格数,如果有超过该值的网格存在就输出“NO”
代码附:
#pragma GCC optimize("Ofast","inline","-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5+10;
int mp[333][333];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t,n,m;
cin>>t;
while(t--)
{
cin>>n>>m;
bool flag=0;
for(int i=0; i<n; ++i)
{
for(int j=0; j<m; ++j)
{
cin>>mp[i][j];
int can=0;
if(i>0)can++;
if(i<n-1)can++;
if(j>0)can++;
if(j<m-1)can++;
if(mp[i][j]>can)flag=1;
mp[i][j]=can;
}
}
if(flag)
{
cout<<"NO"<<endl;
continue;
}
cout<<"YES"<<endl;
for(int i=0; i<n; ++i)
{
for(int j=0; j<m; ++j)
{
cout<<mp[i][j]<<" ";
}cout<<endl;
}
}
return 0;
}