1 条题解

  • 0
    @ 2025-8-7 20:46:02

    挺难一道题,装逼我让你飞起来!

    #include<bits/stdc++.h>
    using namespace std;
    char s[21][21];  //s为字符数组
    int m,n,ans=-1e9;//m为行,n为列,ans为最大值
    int f(int a,int b,int c,int d){//函数
    	int x=0,y=0;//x为行,y为列
    	if((a-c+1)*(b-d+1)%2==1) return 0;//如果它不是平衡的,该罚
    	for(int i=a;i<=c;i++){//遍历行
    		for(int j=b;j<=d;j++){//遍历列
    			if(s[i][j]=='1') x++;//白加
    			if(s[i][j]=='0') y++;//黑加
    		}
    	}
    	if(x==y) return x+y;//返回总和
    	return 0;//不相等,该罚
    }
    int main(){
    	cin>>m>>n;//输入
    	for(int i=1;i<=m;i++){//遍历行
    		for(int j=1;j<=n;j++){//遍历列
    			cin>>s[i][j];//输入
    		}
    	}
    	for(int i=1;i<=m;i++){//遍历左上角
    		for(int j=1;j<=n;j++){//遍历左下角下角
    			for(int ii=i;ii<=m;ii++){//遍历右上角
    				for(int jj=j;jj<=n;jj++){//遍历右下角
    					ans = max(ans,f(i,j,ii,jj));//打擂台
    				}
    			}
    		}
    	}
    	cout<<ans;//输出
    	return 0;//完美
    }
    • 1

    信息

    ID
    1338
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者