Cod sursa(job #114740)

Utilizator FlorianFlorian Marcu Florian Data 15 decembrie 2007 17:21:22
Problema Teren Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
FILE*f=fopen("teren.in","r");
FILE*g=fopen("teren.out","w");
int t[302][302],s[302][302],a[302],n,m, Max, X;
void read()
	{
	fscanf(f,"%d %d %d",&n,&m, &X);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
			fscanf(f,"%d",&t[i][j]);
	}
void form_s()
	{
	int p,q;
	for(p=1;p<=n;++p)
		for(q=1;q<=m;++q)
			s[p][q]=s[p-1][q]+t[p][q];
	}
void form_a(int p, int k)
	{
	for(int i=1;i<=m;++i) a[i]=s[k][i]-s[p-1][i];
	}
void det_secv(int p, int k)
	{
	int dr, st, s=0;
	st=1; dr=1;
	while(dr<=m)
		{
		s+=a[dr];
		while(dr>=st &&s>X)
			{
			s-=a[st];
			st++;
			}
		if(st<=dr) if(Max<(dr-st+1)*(k-p+1)) Max=(dr-st+1)*(k-p+1);
		dr++;
		}
	}
int main()
	{
	read();
	form_s();
	int i,j;
	for(i=1;i<n;++i)
		for(j=i+1;j<=n;++j)
			{
			form_a(i,j);
			det_secv(i,j);
			}
	fprintf(g,"%d",Max);
	return 0;
	}