求助!!!只差5分了!!!

B4005 [GESP202406 四级] 黑白方块

ChelseaLi @ 2024-09-03 19:22:57

#include<iostream>
using namespace std;
int w[15][15];
bool check(int d1,int d2,int d3,int d4){
    int a[2]={0,0};
    for(int i=d1;i<=d3;i++){
        for(int j=d2;j<=d4;j++){
            a[w[i][j]]++;
        }
    }
    return a[0]==a[1];
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        string s;
        cin>>s; 
        for(int j=1;j<=m;j++){
            w[i][j]=s[j-1]-'0';
        }
    }
    int answer=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            for(int I=1;I<=n;I++){
                for(int J=1;J<=m;J++){
                    if(check(i,j,I,J)){
                        answer=max(answer,(I-i+1)*(J-j+1));
                    }
                }
            }
        }
    }
    cout<<answer;
    return 0;
}

by xkai @ 2024-09-03 19:34:27

I,J 不应该从 1 开始枚举,要分别从 i,j 开始枚举。如果 I<i 或者 J<j check 函数始终会返回 true,此时如果 (I-i+1)*(J-j+1) 为正数就会统计到错误答案。


by ChelseaLi @ 2024-11-29 21:44:25

@xkai谢谢大佬


|