Cod sursa(job #1312309)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 9 ianuarie 2015 11:21:21
Problema BMatrix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#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;
}