Cod sursa(job #300197)

Utilizator lucaz0rLuca Liviu lucaz0r Data 7 aprilie 2009 11:58:08
Problema Teren Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <stdlib.h>

int m, n;

void showmat(int c[100][100]) {
	int i, j;
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) printf ("%d ", c[i][j]);
		printf ("\n"); }
	}

int main() {
	int  i, j, a[100][100], b[100][100], x,ok, count, max, cj, ci, li, lj, surf, s=0;

	freopen ("teren.in", "r", stdin);
	freopen ("teren.out", "w", stdout);

	scanf ("%d %d %d", &m, &n, &x);
	for (i = 0; i < m; i++)
		for (j = 0; j < n; j++)
			scanf ("%d", &a[i][j]);


	for (j = 0; j < n; j++)
	      { count = 0;
			for (i = 0; i < m; i++)
			{ if( a[i][j] == 1) count++;
			  b[i][j] = count; }
		  }
	max = 0;
	for (li = 0; li < m; li++)
		for (lj = li; lj < m; lj++)
		{
			cj = 0; s=0; ci = 0; ok=0;
			while(ci < n)
				{

				 if (li>0)  s = s + b[lj][ci] - b[li-1][ci];
					else s = s + b[lj][ci];
				 if(s > x) { surf = (lj-li+1)*(ci-cj);
							ok = 1;
							  if(surf > max) max = surf;
							  for (j = cj; j < ci; j++)
								{ s = s - b[li][cj] + b[li-1][cj];
								  if (s < x) { cj = j;
											   break; }}
						   }
				 ci++;
				 if (ok == 0 && ci == n-1)
					   surf = (lj-li+1)*(ci-cj+1);
				 if (surf > max ) max = surf;

				 }
		 }




	printf ("%d\n",max);







	/*showmat (a);
	printf ("\n");
	showmat (b);*/




	return 0;
 }