Cod sursa(job #441069)

Utilizator GeorgianneGircu Georgiana Georgianne Data 12 aprilie 2010 19:03:09
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.88 kb
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

 int minim(int x,int y,int z)
 	{
		int min1=x,min2=0;
		if(y>z)
			min2=z;
		else
			min2=y;
		return min1>min2? min2:min1;
	}
  int minim2(int x,int y,int z,int w)
	{
		int min1=0,min2=0;
		if(x>y)
			min1=y;
		else min1=x;
		if(z>w)
			min2=w;
		else
			min2=z;
		return min1>min2? min2:min1;
	}
	
int main()
{
FILE *fis=fopen("figuri2.in","r");
FILE *fis_out=fopen("figuri2.out","w");
int n,i,j,max=0,max2=0,nr=0,nr2=0;

fscanf(fis,"%i",&n);
char a[n][n],s[n];
int aux[n][n],aux2[n][n];

	for ( i = 0; i < n; i++)  //construiesc matricea cu datele din fisier
		   {
		    fscanf(fis,"%s",s);
			 for(j=0;j<n;j++)
		     	a[i][j]=s[j];
	          }
//matrice patrat
	for( i=0;i<n;i++)
			for( j=0;j<n;j++)
				if(i==0|| j==0)
					aux[i][j]=(a[i][j]-'0');
		for( i=1;i<n;i++)
			for( j=1;j<n;j++)
				{
				if((a[i][j]-'0')==0)
    				aux[i][j]=0;
    			else 
                    aux[i][j]=1+minim(aux[i-1][j-1],aux[i][j-1],aux[i-1][j]);
				}
 
//matrice romb	 	   
 for( i=0;i<n;i++)
	for(j=0;j<n;j++)
	     if(i==0|| i==1|| j==0 || j==n-1)
			aux2[i][j]=(a[i][j]-'0');
		for(i=2;i<n;i++)
			for(j=1;j<n-1;j++)
				{
				if((a[i][j]-'0')==0)
    				       aux2[i][j]=0;
    		     	else 
                     aux2[i][j]=1+minim2(aux2[i-1][j-1],aux2[i-1][j],aux2[i-1][j+1],aux2[i-2][j]);
				}

//prelucrari
int ok=0,ok2=0;
for( i=0;i<n;i++)
	for(j=0;j<n;j++)
	{	if(aux[i][j] > max)
				 {	max=aux[i][j];
				    ok=1;
                  }
	   if(aux2[i][j] > max2)
	              { max2=aux2[i][j];
	               ok2=1;
                }
      }
  for( i=0;i<n;i++)
	for(j=0;j<n;j++)
	{if(aux[i][j]==max && ok==1) 
					nr++;	
	if(aux2[i][j]==max2 && ok2==1)
					nr2++;
}
  fprintf(fis_out,"%i %i\n",max,nr);
  fprintf(fis_out,"%i %i",max2,nr2);
   return 0;
}