Codeforces Global Round 9 B. Neighbor Grid (构造,贪心)

-
题意:给一个\(n\)X\(m\)的矩阵,矩阵中某个数字\(k\)表示其四周恰好有\(k\)个不为0的数字,你可以使任意位置上的数字变大,如果操作后满足条件,输出新矩阵,否则输出NO.
-
题解:贪心,既然能使任意位置加大任意数值,那么我们可以将所有位置都给他填满,这样的话,只要是满足条件的情况就都能这样输出,所以我们遍历每个位置,然后判断周围能填多少个,如果某个数大于周围能填的个数,那么就不满足条件.
-
代码:
int t; int n,m; int a[400][400]; int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0}; int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>t; while(t--){ cin>>n>>m; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ cin>>a[i][j]; } } bool ok=1; int cnt=0; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ cnt=0; for(int k=0;k<4;++k){ int x=i+dx[k]; int y=j+dy[k]; if(x>=1 && x<=n && y>=1 && y<=m) cnt++; } if(a[i][j]>cnt){ ok=0; break; } else a[i][j]=cnt; } if(!ok){ break; } } if(!ok){ cout<<"NO"<<endl; } else{ cout<<"YES"<<endl; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ cout<<a[i][j]<<" "; } cout<<endl; } } } return 0; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮

浙公网安备 33010602011771号