75分,求调,玄关

B4005 [GESP202406 四级] 黑白方块

Monesyy @ 2024-07-29 22:06:23


#include<bits/stdc++.h>
using namespace std;
int const N=110;

char a[N][N];
int b[N][N],ans[N][N];

int main(){
    int n,m;cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    int maxx=0;
    for(int l=1;l<=n;l++){
        for(int k=1;k<=m;k++){
            for(int i=l;i<=n;i++){
                for(int j=k;j<=m;j++){
                    if(a[i][j]=='1') b[l][k]++;
                    if(2*b[l][k]==(i-l+1)*(j-k+1))
                        ans[l][k]=max(ans[l][k],(i-l+1)*(j-k+1));
                }
            }
        }
    }   
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            maxx=max(maxx,ans[i][j]);
        }
    }
    cout<<maxx<<endl;
    return 0;
}

by Gavinzhou @ 2024-08-22 18:47:58

#include <iostream>
#include <algorithm>
using namespace std;
char a[20][20];
bool pingheng(int r1,int r2,int l1,int l2){
    int cnt1,cnt2;
    cnt2=cnt1=0;
    for(int i=r1;i<=l1;i++){
        for(int j=r2;j<=l2;j++){
            if(a[i][j]=='1') cnt1++;
            else cnt2++;
        }
    }
    if(cnt1==cnt2) return true;
    else return false;

}
int main(){
    int n,m,cnt=0;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    int maxn=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            for(int k=i;k<=n;k++){
                for(int l=j;l<=m;l++){
                    if(pingheng(i,j,k,l)){
                        int count=(k-i+1)*(l-j+1);
                        maxn=max(maxn,count);
                        //cout<<i<<' '<<j<<' '<<k<<' '<<l<<' '<<count<<endl;
                    }
                }
            }
        }
    }

    cout<<maxn;
    return 0;
}

试试我的


by Gavinzhou @ 2024-08-22 18:49:05

暴力可以过,不用前缀优化


by zenglicheng666 @ 2024-08-25 18:21:43

#include<bits/stdc++.h>
using namespace std;
int n,m,ans,tmp;
char mp[20][20];
int cheak(int a,int b,int c,int d){
    int cnt=0;
    for(int i=a;i<=c;i++)
        for(int j=b;j<=d;j++)
            if(mp[i][j]=='1') 
            cnt++;
    return 2*cnt==(c-a+1)*(d-b+1);
    }
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>mp[i][j];
    for(int i=1;i<=n;i++){ 
        for(int j=1;j<=m;j++){
            for(int ii=i;ii<=n;ii++) {
                for(int jj=j;jj<=m;jj++) {
                    if(cheak(i,j,ii,jj)){
                        ans=max(ans,(ii-i+1)*(jj-j+1));
                    }   
                }
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

求关 ! ???


by zenglicheng666 @ 2024-08-25 18:22:21


by Monesyy @ 2024-09-19 21:49:07

@Gavinzhou @zenglicheng666 谢谢,已关


|