Cod sursa(job #2283298)

Utilizator papinub2Papa Valentin papinub2 Data 15 noiembrie 2018 12:45:46
Problema BMatrix Scor 56
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <fstream>

using namespace std;

ifstream in("bmatrix.in");
ofstream out("bmatrix.out");

const int Nmax = 205;

int n, m, sol;
int v[Nmax], st[Nmax], sus[Nmax], dr[Nmax], jos[Nmax];
char s[Nmax][Nmax];

int main()
{
    in >> n >> m;

    for (int i = 1; i <= n; i++)
        in >> (s[i] + 1);

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (s[i][j] == '0')
                v[j]++;
            else
                v[j] = 0;

            int nr = 0;
            int h = 40005;

            for (int k = j; k > 0; k--)
            {
                h = min (h, v[k]);
                nr = max (nr, h * (j - k + 1));
            }

            st[i] = max(max(st[i - 1], st[i]), nr);
            sus[j] = max(max(sus[j - 1], sus[j]), nr);
        }
    }

    for (int i = 1; i <= m; i++)
        v[i] = 0;

    for (int i = n; i >= 1; i--)
    {
        for (int j = m; j >= 1; j--)
        {
            if (s[i][j] == '0')
                v[j]++;
            else
                v[j] = 0;

            int nr = 0;
            int h = 40005;

            for (int k = j; k <= m; k++)
            {
                h = min (h, v[k]);
                nr = max (nr, h * (k - j + 1));
            }

            dr[i] = max(max(dr[i + 1], dr[i]), nr);
            jos[j] = max(max(jos[j + 1], jos[j]), nr);
        }
    }

    for (int i = 1; i < n; i++)
        sol = max (sol, st[i] + dr[i + 1]);

    out << sol;
    return 0;
}