Derek123wzy @ 2024-07-20 07:54:21
为啥别人O(n^6)满分, 而我O(n^6)10分?
代码如下:
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
int n,m,ans,w[15][15];
bool check(int xa,int ya,int xb,int yb){
int a[2]={};
for(int i=xa;i<=xb;i++)
for(int j=ya;j<=yb;j++)
a[w[i][j]]++;
return a[0]==a[1];
}
signed main(){
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)cin>>w[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=i;k<m;k++)
for(int l=j;l<m;l++)
if(check(i,j,k,l))
ans=max(ans,(k-i+1)*(l-j+1));
cout<<ans<<'\n';
return 0;
}
by xin20110426 @ 2024-07-20 08:13:18
@Derek123wzy 大哥,读入的数字之间没有空格,然后你还用cin
by xin20110426 @ 2024-07-20 08:14:36
你这样例都过不了,不检查一下就直接交了?
by xin20110426 @ 2024-07-20 08:19:57
而且你主函数的循环范围都是错误的 把题解好好理解一下 前两层枚举的是矩形的左上角,后两层枚举的是矩形的右下角 你这个枚举的范围要改一下 @Derek123wzy
by xin20110426 @ 2024-07-20 08:27:36
最后,虽然这道题不要紧,但是真的,不要老是define int unsigned long long。之前我NOIP就犯过这个问题。万一题目涉及负数运算,你就直接爆零了。然后开了一堆大数组,结果unsigned long long成功让你MLE,又爆零。
by xin20110426 @ 2024-07-20 08:28:12
附改正确的AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,ans,w[15][15];
bool check(int xa,int ya,int xb,int yb){
int a[2]={};
for(int i=xa;i<=xb;i++)
for(int j=ya;j<=yb;j++)
a[w[i][j]]++;
return a[0]==a[1];
}
signed main(){
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=0;i<n;i++) {
string s; cin >> s; //整行按字符串读入
for(int j=0;j<m;j++) {
w[i][j] = s[j] - '0'; //转int
}
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
for(int k=i;k<n;k++)
for(int l=j;l<m;l++)
if(check(i,j,k,l))
ans=max(ans,(k-i+1)*(l-j+1));
cout<<ans;
return 0;
}
@Derek123wzy
by xin20110426 @ 2024-07-20 08:30:26
同样的时间复杂度,如果你没过,别人过了,大多数情况是自己的代码打错了。因为你的代码只有RE和WA
by xin20110426 @ 2024-07-20 08:36:04
关注谢谢
by Derek123wzy @ 2024-07-23 09:25:16
谢谢已关
by sunruiqi @ 2024-07-27 13:35:00
@xin20110426 谢谢!我本来也只有40分,参考了一下你的,我过了!