Pagini recente » Cod sursa (job #3180314) | Cod sursa (job #2079186) | Cod sursa (job #828101) | Cod sursa (job #2046199) | Cod sursa (job #2741130)
#include <bits/stdc++.h>
using namespace std;
#define debug(x) cerr << #x << " = " << x << "\n";
using ll = long long;
ifstream in("bmatrix.in");
ofstream out("bmatrix.out");
const int maxN = (int)2e2 + 5;
int n, m;
char mat[maxN][maxN];
int hist[maxN];
char aux[maxN][maxN];
int solveHistogram() {
int ans = 0;
stack<int> st;
hist[m + 1] = hist[0] = 0;
st.push(0);
for (int i = 1; i <= m + 1; i++) {
while ((int)st.size() > 0 && hist[st.top()] > hist[i]) {
int top = st.top();
st.pop();
ans = max(ans, hist[top] * (i - st.top() - 1));
}
st.push(i);
}
return ans;
}
int solve(int start, int end) {
int ans = 0;
for (int i = 0; i <= max(n, m); i++) {
hist[i] = 0;
}
for (int i = start; i <= end; i++) {
for (int j = 1; j <= m; j++) {
if (mat[i][j] == '0') {
hist[j]++;
} else {
hist[j] = 0;
}
}
ans = max(ans, solveHistogram());
}
return ans;
}
int main() {
in >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
in >> mat[i][j];
}
}
int ans = 0;
for (int rep = 0; rep < 2; rep++) {
for (int line = 1; line < n; line++) {
ans = max(ans, solve(1, line) + solve(line + 1, n));
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
aux[j][i] = mat[i][j];
}
}
swap(n, m);
}
out << ans << "\n";
return 0;
}