3 条题解

  • 1
    @ 2025-7-12 8:31:48

    • 0
      @ 2026-2-5 16:06:13
      #include <iostream>
      #include<string>
      #include<math.h>
      using namespace std;
      char c[1005][1005];
      int arr[1005][1005];
      int main() { //B4263 [GESP202503 四级] 荒地开垦
      	int n,m,maxhd=0,dian=0,zw=0,maxzw=0,x,y,ans=0;	
      	cin>>n>>m;
      	for(int i=0;i<=n+1;i++){ //四个边初始化为-1 
      		for(int j=0;j<=m+1;j++){
      			if(i==0 or j==0 or i==n+1 or j==m+1)
      				arr[i][j]=-9;
      		}
      	}
      	
      	for(int i=1;i<=n;i++){ //输入 
      		for(int j=1;j<=m;j++){
      			cin>>c[i][j];												
      		}
      	}
      	
      	for(int i=1;i<=n;i++){ //累计每个格子周边有几个杂物 
      		for(int j=1;j<=m;j++){
      			arr[i][j]=(c[i][j]=='#')+(c[i-1][j]=='#')+(c[i+1][j]=='#')+(c[i][j-1]=='#')+(c[i][j+1]=='#');		
      		}
      	}
      
      	for(int i=1;i<=n;i++){ //累计杂物周围荒地数量 
      		for(int j=1;j<=m;j++){
      			zw=0;
      			if(c[i][j]=='#'){
      				zw=(arr[i][j]==1)+(arr[i-1][j]==1)+(arr[i+1][j]==1)+(arr[i][j+1]==1)+(arr[i][j-1]==1);
      				if(maxzw<zw){ //周边杂物值越接近4,说明可开拓的荒地越多 
      					maxzw=zw;
      				}
      			}				
      		}
      	}
      
      	
      	for(int i=1;i<=n;i++){ //累计荒地数量 
      		for(int j=1;j<=m;j++){
      			if(arr[i][j]==0){
      				ans++;
      			}				
      		}
      	}
      	//cout<<"\nans="<<ans<<" maxzw="<<maxzw<<endl;
      	
      	cout<<ans+maxzw<<endl;
      	
      //	for(int i=0;i<=n+1;i++){
      //		for(int j=0;j<=m+1;j++){
      //			printf("%c",c[i][j]);
      //		}
      //		cout<<endl;
      //	}
      //	cout<<endl;
      //	
      //	for(int i=0;i<=n+1;i++){
      //		for(int j=0;j<=m+1;j++){
      //			printf("%3d",arr[i][j]);
      //		}
      //		cout<<endl;
      //	}
      	return 0;
      }
      
      • 0
        @ 2026-1-18 10:35:29
        #include <iostream>
        #include<string>
        #include<math.h>
        using namespace std;
        char c[1005][1005];
        int arr[1005][1005];
        int main() { //B4263 [GESP202503 四级] 荒地开垦
        	int n,m,maxhd=0,dian=0,zw=0,maxzw=0,x,y,ans=0;	
        	cin>>n>>m;
        	for(int i=0;i<=n+1;i++){ //四个边初始化为-1 
        		for(int j=0;j<=m+1;j++){
        			if(i==0 or j==0 or i==n+1 or j==m+1)
        				arr[i][j]=-9;
        		}
        	}
        	
        	for(int i=1;i<=n;i++){ //输入 
        		for(int j=1;j<=m;j++){
        			cin>>c[i][j];												
        		}
        	}
        	
        	for(int i=1;i<=n;i++){ //累计每个格子周边有几个杂物 
        		for(int j=1;j<=m;j++){
        			arr[i][j]=(c[i][j]=='#')+(c[i-1][j]=='#')+(c[i+1][j]=='#')+(c[i][j-1]=='#')+(c[i][j+1]=='#');		
        		}
        	}
        
        	for(int i=1;i<=n;i++){ //累计杂物周围荒地数量 
        		for(int j=1;j<=m;j++){
        			zw=0;
        			if(c[i][j]=='#'){
        				zw=(arr[i][j]==1)+(arr[i-1][j]==1)+(arr[i+1][j]==1)+(arr[i][j+1]==1)+(arr[i][j-1]==1);
        				if(maxzw<zw){ //周边杂物值越接近4,说明可开拓的荒地越多 
        					maxzw=zw;
        				}
        			}				
        		}
        	}
        
        	
        	for(int i=1;i<=n;i++){ //累计荒地数量 
        		for(int j=1;j<=m;j++){
        			if(arr[i][j]==0){
        				ans++;
        			}				
        		}
        	}
        	//cout<<"\nans="<<ans<<" maxzw="<<maxzw<<endl;
        	
        	cout<<ans+maxzw<<endl;
        	
        //	for(int i=0;i<=n+1;i++){
        //		for(int j=0;j<=m+1;j++){
        //			printf("%c",c[i][j]);
        //		}
        //		cout<<endl;
        //	}
        //	cout<<endl;
        //	
        //	for(int i=0;i<=n+1;i++){
        //		for(int j=0;j<=m+1;j++){
        //			printf("%3d",arr[i][j]);
        //		}
        //		cout<<endl;
        //	}
        	return 0;
        }
        
        • 1

        信息

        ID
        1938
        时间
        1000ms
        内存
        256MiB
        难度
        10
        标签
        (无)
        递交数
        5
        已通过
        5
        上传者