Cod sursa(job #63002)

Utilizator FlorianFlorian Marcu Florian Data 25 mai 2007 13:45:38
Problema BMatrix Scor 8
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
int n,m,l,sol1,sol2;
char a[202][202];
FILE*g=fopen("bmatrix.out","w");
void del(int p, int k, int linie)
	{
	int i,j;
	for(i=l;i<=linie;++i)
		for(j=p;j<=k;++j)
		a[i][j]='3';
	}

void read()
	{
	int i,j;
	FILE*f=fopen("bmatrix.in","r");
	fscanf(f,"%d %d\n",&n,&m);
	for(i=1;i<=n;++i)
		{
		for(j=1;j<=m;++j)
			fscanf(f,"%c",&a[i][j]);
		fscanf(f,"\n");
		}
	}
int maxim(int p, int k,int linie)
	{
	int area;
	area=(linie-l+1)*(k-p+1);
	del(p,k,linie);
	return area;
	}

int det_arie(int p, int k, int linie)
	{
	int i,j,arie,ok=1;
	i=p; j=k;
	while(i<=j)
		{
		if(a[linie][j]!='0') {ok=0; break;}
		else { j--; i++;}
		}
	if(ok==1&&linie<n) return det_arie(p,k,linie+1);
	else if (linie==n&&ok==1) return maxim(p,k,n);
	else return maxim(p,k,linie-1);
	}
void solve()
	{
	int i,j,p,area;
	for(i=1;i<=n;++i)
	for(j=1;j<=m;++j)
		{
		if(a[i][j]=='0')
			{
			for(p=m;p>=j;--p)
				{
				if(a[i][p]=='0')
					{
					l=i;

					area=det_arie(j,p,i);
					if(area>sol1)
						{
						 sol2=sol1;
						 sol1=area;
						 }
					else if (area>sol2) sol2=area;
					}
				}
				}
				}}
int main()
	{
	read();
	solve();
	fprintf(g,"%d",sol1+sol2);
	return 0;
	}