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 (构造,贪心)

Codeforces Global Round 1 做题记录

Codeforces Global Round 8 A. C+=(贪心)