Cod sursa(job #440498)
Utilizator | Data | 12 aprilie 2010 02:39:42 | |
---|---|---|---|
Problema | Gutui | Scor | 0 |
Compilator | cpp | Status | done |
Runda | teme_upb | Marime | 2.88 kb |
#include <stdio.h>
int main()
{
FILE *f, *g;
f = fopen ("figuri2.in", "r");
g = fopen ("figuri2.out", "w");
int i,j;
short int n, x;
fscanf (f, "%d", &n);
fscanf (f, "%c", &x);
//printf ("n=%d\n", n);
short int a[n][n], b[n][n], c[n][n], patrate=0, roambe=0, max_patrate=0, max_roambe=0, min;
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
fscanf (f, "%c", &a[i][j]);
//printf("%c", a[i][j]);
}
//printf ("\n");
fscanf (f, "%c", &x);
}
fclose (f);
for (i=0; i<n; i++)
for (j=0; j<n; j++)
if (a[i][j] == '0')
{
b[i][j] = 0;
c[i][j] = 0;
}
else
{
if ((i == 0) || (j == 0))
{
b[i][j] = 1;
c[i][j] = 1;
}
else
{
min = b[i][j-1];
if (b[i-1][j-1] < min)
min = b[i-1][j-1];
if (b[i-1][j] < min)
min = b[i-1][j];
b[i][j] = min + 1;
if (b[i][j] == max_patrate)
patrate++;
else
if (b[i][j] > max_patrate)
{
max_patrate = b[i][j];
patrate = 1;
}
if ((j == (n-1)) || (i == 1))
c[i][j] = 1;
else
{
min = c[i-1][j-1];
if (c[i-2][j] < min)
min = c[i-2][j];
if (c[i-1][j+1] < min)
min = c[i-1][j+1];
if (a[i-1][j] == '1')
{
c[i][j] = min +1;
if (c[i][j] == max_roambe)
roambe++;
else
if (c[i][j] > max_roambe)
{
max_roambe = c[i][j];
roambe = 1;
}
}
else
c[i][j] = 0;
}
}
}
fprintf (g,"%d %d\n", max_patrate, patrate);
fprintf (g,"%d %d\n", max_roambe, roambe);
fclose(g);
return 0;
}