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谢谢