Cod sursa(job #423456)

Utilizator vdobrotaDobrota Valentin Eugen vdobrota Data 23 martie 2010 21:31:07
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.83 kb
// Dobrota Valentin-Eugen, 324CA, PA, Tema1, Prob1 - Figuri2, 2009-2010

#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define minim(x,y) ((x)<(y)?(x):(y))

int main()
{
	// Declarari
	int i, j, n, **p, **r;
	char *line, **lines;
	int maxp = 0, nrp = 0, maxr = 0, nrr = 0;
	FILE *fin = fopen("figuri2.in", "r");
	FILE *fout = fopen("figuri2.out", "w");

	// Citiri
	fscanf(fin, "%d\n", &n);
	lines = (char **)malloc(n * sizeof(int *));
	line = (char *)malloc((n + 2) * sizeof(int *));
	p = (int **)malloc(n * sizeof(int *));
	r = (int **)malloc(n * sizeof(int *));
	for (i = 0; i < n; ++i) {
		fgets(line, 300, fin);
		lines[i] = (char *)malloc((n + 2) * sizeof(int));
		strcpy(lines[i], line);
		p[i] = (int *)malloc(n * sizeof(int));
		r[i] = (int *)malloc(n * sizeof(int));
	}

	// Initializare PD
	for (i = 0; i < n; i++) {
		r[0][i] = p[0][i] = lines[0][i] - '0';
		r[i][0] = p[i][0] = lines[i][0] - '0';
		r[1][i] = lines[1][i] - '0';
		r[i][n - 1] = lines[i][n - 1] - '0';
	}

	// PD
	for (i = 1; i < n; i++)
		for (j = 1; j < n; j++) {
			if (lines[i][j] == '0')
				p[i][j] = 0;
			else
				p[i][j] =
				    1 + minim(p[i - 1][j],
					      minim(p[i - 1][j - 1],
						    p[i][j - 1]));
			if ((i != 1) && (j != n - 1)) {
				if (lines[i][j] == '0')
					r[i][j] = 0;
				else
					r[i][j] =
					    1 +
					    minim(minim
						  (r[i - 1][j - 1],
						   r[i - 1][j]),
						  minim(r[i - 1][j + 1],
							r[i - 2][j]));
			}
		}

	// Aflare rezultat
	for (i = 0; i < n; i++)
		for (j = 0; j < n; j++) {
			if (p[i][j] == maxp)
				nrp++;
			else if (p[i][j] > maxp) {
				nrp = 1;
				maxp = p[i][j];
			}
			if (r[i][j] == maxr)
				nrr++;
			else if (r[i][j] > maxr) {
				nrr = 1;
				maxr = r[i][j];
			}
		}

	// Afisare
	fprintf(fout, "%d %d\n%d %d\n", maxp, nrp, maxr, nrr);

	//Finalizare
	fclose(fin);
	fclose(fout);
	return 0;
}