Cod sursa(job #370711)

Utilizator Andrei200Andrei200 Andrei200 Data 1 decembrie 2009 21:03:20
Problema Teren Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
#include <cstring>

#define file_in "teren.in"
#define file_out "teren.out"

int n,m,suma,x,i,j,k,st,dr,arie_max,t[310][310],s[310][310],a[310];

inline int max(int a, int b) { return a>b?a:b; }

int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d %d", &n, &m, &x);
	for (i=1;i<=n;++i)
		 for (j=1;j<=m;++j)
			  scanf("%d", &t[i][j]);
		 
			 
	for (i=1;i<=m;++i)	 
	{
		int nr1=0;
		for (j=1;j<=n;++j)	  
	    	 if (t[j][i]==1) nr1++;
		a[i]=nr1;
	}
	
	/*for (i=1;i<=n;++i)
          for (j=1;j<=m;++j)		
		       s[i][j]=s[i-1][j]+t[i][j];  
		 
	for (i=1;i<=n;++i)
         for (j=1;j<=n;++j)
              for (k=1;k<=m;++k)			 
				    a[k]=s[j][k]-s[i-1][k];*/
	 
	
	for (i=1;i<=n;++i)
	for (j=1;j<=n;++j)	 
	{
		st=1;
    suma=0;
    for (dr=1;dr<=m;++dr)
	{
		suma+=a[dr];
		while(suma>x && st<=dr)
		{
			suma-=a[st];
			st++;
		}
		if (st<=dr)
			arie_max=max(arie_max,(j-i+1)*(dr-st+1));
	}
	}
	
	printf("%d", arie_max);
	
	fclose(stdin);
	fclose(stdout);
	
	
	return 0;
	
}