Pagini recente » Cod sursa (job #2236924) | Cod sursa (job #2615520) | Cod sursa (job #354659) | Cod sursa (job #3268510) | Cod sursa (job #1312309)
#include <fstream>
using namespace std;
ifstream fin ("bmatrix.in");
ofstream fout ("bmatrix.out");
int i1, i2, j1, n, m, maxim;
int l[210][210], up[210], down[210];
bool a[210][210];
char s[210];
void rot(int n, int m) {
for (int j = 1; j <= m; j++)
for (int i = 1; i <= n; i++)
temp[j][i] = a[n - i + 1][j];
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
a[i][j] = temp[i][j];
}
inline int MAX (int a, int b) {
return (a > b ? a : b);
}
int main () {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
fin >> (s+1);
for (int j = 1; j <= m; j++) {
a[i][j] = s[j] - '0';
l[i][j] = l[i-1][j] + a[i][j];
}
}
for (int i = 1; i <= n; i++)
for (int j = i + 1; j <= n; j++){
int last = 0;
for (int k = 1; k <= m; k++)
if (l[j][k] - l[i-1][k] != 0){
int array = (j - i + 1) * (k - last - 1);
if (array > maxim){
maxim = array;
i1 = i, i2 = j, j1 = k-1;
}
if (array > up[j])
up[i] = array;
if (array > down[i])
down[i] = array;
last = k;
}
int array = (j - i + 1) * (m - last);
if (array > maxim){
maxim = array;
i1 = i, i2 = j, j1 = m;
}
if (array > up[j])
up[i] = array;
if (array > down[i])
down[i] = array;
}
rot ();
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
fout << maxim + MAX (up[i1-1], down[i2+1]) << "\n";
return 0;
}