Codeforces Global Round 9 B. Neighbor Grid (构造,贪心)
Posted lr599909928
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }
以上是关于Codeforces Global Round 9 B. Neighbor Grid (构造,贪心)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Global Round 9 C.Element Extermination(思维)
Codeforces Global Round 9 DReplace by MEX
Codeforces Global Round 9 C. Element Extermination (思维,栈)
Codeforces Global Round 9 B. Neighbor Grid (构造,贪心)