Cod sursa(job #440498)

Utilizator hodoo_manrazvan ionita hodoo_man 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;    
}