Cod sursa(job #2447728)

Utilizator Iulia25Hosu Iulia Iulia25 Data 14 august 2019 14:13:31
Problema BMatrix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include <cstring>

using namespace std;

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

int n, m, a[205][205], s[205], Max;
int max_sus[205], max_jos[205];

void fjaoisdfjl()  {
  int nr = 0;
  memset(s, 0, sizeof(s));
	for (int i = 1; i <= n; ++i)  {
		max_sus[i] = max_sus[i - 1];
		for (int j = 1; j <= m; ++j)
			if (a[i][j] == 0)
				++s[j];
			else
				s[j] = 0;
		for (int c = 1; c <= m; ++c)  {
			for (int j = c; j; --j)  {
				if (s[j] < s[c])
					break;
				++nr;
			}
			for (int j = c + 1; j <= m; ++j)  {
				if (s[j] < s[c])
					break;
				++nr;
			}
			max_sus[i] = max(max_sus[i], nr * s[c]);
			nr = 0;
		}
	}
	memset(s, 0, sizeof(s));
	for (int i = n; i; --i)  {
		max_jos[i] = max_jos[i + 1];
		for (int j = 1; j <= m; ++j)
			if (a[i][j] == 0)
				++s[j];
			else
				s[j] = 0;
		for (int c = 1; c <= m; ++c)  {
			for (int j = c; j; --j)  {
				if (s[j] < s[c])
					break;
				++nr;
			}
			for (int j = c + 1; j <= m; ++j)  {
				if (s[j] < s[c])
					break;
				++nr;
			}
      max_jos[i] = max(max_jos[i], nr * s[c]);
      nr = 0;
		}
	}
	for (int i = 1; i < n; ++i)
    Max = max(Max, max_sus[i] + max_jos[i + 1]);
}

int main()  {
	fin >> n >> m;
	char c;
	for (int i = 1; i <= n; ++i)  {
		for (int j = 1; j <= m; ++j)  {
			fin >> c;
			a[i][j] = c - '0';
		}
	}
	fjaoisdfjl();
	fin.close();
	ifstream fin("bmatrix.in");
	fin >> n >> m;
	char caracterfsjefdn;
	for (int i = 1; i <= n; ++i)  {
		for (int j = 1; j <= m; ++j)  {
			fin >> caracterfsjefdn;
			a[j][i] = caracterfsjefdn - '0';
		}
	}
	swap(n, m);
	fjaoisdfjl();
	fout << Max;
	return 0;
}