有和我犯一样错误的么

B4005 [GESP202406 四级] 黑白方块

mooktian @ 2024-11-13 11:21:24

想复杂了,用了二维前缀和来做,

尴尬的是,还敲错了。

主要是坐标搞错了,

左上角是x1,y1,右下角是x2,y2。

然后我把

x2设成了从x1+1 ~ n y2设成了从y1+1 ~ m

结果就只有75分。

我去,我就说一个橙题咋有可能这么难得。

裂开了要。


by tengyuxuan @ 2024-11-26 16:30:47

我是 75分代码:

#include <bits/stdc++.h>
using namespace std;
char a[102][102];
bool zx(int stx,int sty,int x,int y){
    int bsum=0,hsum=0;
    for(int i=stx;i<=x;i++){
        for(int j=sty;j<=y;j++){
            if(a[i][j]=='0')bsum++;
            if(a[i][j]=='1')hsum++;
        }
    }
    if(bsum==hsum)return 1;
    return 0;
}
int main(){
    int maxn=0;
    bool f=0;
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            for(int k=i+1;k<=n;k++){
                for(int v=j+1;v<=m;v++){
                    if((k-i+1)*(v-j+1)>maxn&&zx(i,j,k,v)){
                        maxn=(k-i+1)*(v-j+1);
                    }
                }
            }
        }
    }
    cout<<maxn;
    return 0;
}

一百分:

#include <bits/stdc++.h>
using namespace std;
char a[102][102];
bool zx(int stx,int sty,int x,int y){
    int bsum=0,hsum=0;
    for(int i=stx;i<=x;i++){
        for(int j=sty;j<=y;j++){
            if(a[i][j]=='0')bsum++;
            if(a[i][j]=='1')hsum++;
        }
    }
    if(bsum==hsum)return 1;
    return 0;
}
int main(){
    int maxn=0;
    bool f=0;
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            for(int k=i;k<=n;k++){
                for(int v=j;v<=m;v++){
                    if((k-i+1)*(v-j+1)>maxn&&zx(i,j,k,v)){
                        maxn=(k-i+1)*(v-j+1);
                    }
                }
            }
        }
    }
    cout<<maxn;
    return 0;
}

一开始我和你想的一样(前缀和) 被算法标签误导了后来发现暴力就行 我也是看了你这贴才AC的 @mooktian谢谢


|