Cod sursa(job #435174)

Utilizator dragosiordachedragos iordache dragosiordache Data 6 aprilie 2010 23:36:40
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.38 kb
#include "stdio.h"

#define min(a,b,c) (((a)>(b))?(((b)>(c))?(c):(b)):(((a)>(c))?(c):(a)))

int main() {
	FILE *f,*g;
	int i,n,j;

	f = fopen("figuri2.in", "r");
	g = fopen("figuri2.out", "w");

	fscanf(f, "%i\n", &n);//citesc n

	//a = (unsigned char*)malloc(n*n*sizeof(char));
	unsigned char a[n*n];

	for (i=0;i<n;i++)
	{
		fgets((char*)(a+i*n), n+2, f);
		for (j=n*i;j<n*(i+1);j++)
		{
			*(a+j) -= 48;
			if (*(a+j)>0 && i>0 && j%n!=0)
				if (*(a+j-1)>0 && *(a+j-n)>0 && *(a+j-n-1)>0)
					*(a+j) = min(*(a+j-1), *(a+j-n), *(a+j-n-1))+1;//caut patrate
		}
	}
			

	int maxim=0, nr_maxim=0;
	for (i=0;i<n*n;i++)
			if (*(a+i)>maxim) {maxim = *(a+i);nr_maxim = 1;}//numar patrate de latura maxima
			else if (*(a+i) == maxim) {nr_maxim++;};
	fprintf(g, "%i %i\n", maxim, (maxim)?nr_maxim:0);

	for (i=0;i<n*n;i++)
			if (*(a+i)>0) 
			{
				*(a+i)=1;//resetez matricea
				if (i>=2*n && i%n!=0 && i%n!=n-1)
					if (*(a+i-n+1)>0 && *(a+i-n-1)>0 && *(a+i-n)>0 && *(a+i-2*n)>0)
						*(a+i) = min(*(a+i-n-1), *(a+i-n+1), *(a+i-2*n))+1;//caut romburi
			}
		

	maxim=0, nr_maxim=0;
	for (i=0;i<n*n;i++)
			if (*(a+i)>maxim) {maxim = *(a+i);nr_maxim = 1;}//numar patrate de latura maxima
			else if (*(a+i) == maxim) {nr_maxim++;};
	fprintf(g, "%i %i\n", maxim, (maxim)?nr_maxim:0);
	
	fclose(f);
	fclose(g);
	/*for (i=0;i<n;i++)
	{
		for (j=0;j<n;j++)
			printf("%i", *(a+i*n+j));
		printf("\n");
	}*/

	return 0;
}