Cod sursa(job #441506)

Utilizator daniel.tabacaruTabacaru Daniel daniel.tabacaru Data 12 aprilie 2010 22:42:05
Problema Gutui Scor 0
Compilator cpp Status done
Runda teme_upb Marime 2.49 kb
#include <stdio.h>
#include <stdlib.h>

int m[255][255], aux1[255][255], aux2[255][255];

int vecin (int i, int j)
{
    if (i >= 0 && j >= 0) return m[i][j];
    return 0;
}

int vecin1 (int i, int j)
{
    if (i >= 0 && j >= 0) return aux1[i][j];
    return 0;
}

int vecin2 (int i, int j)
{
    if (i >= 0 && j >= 0) return aux2[i][j];
    return 0;
}

int minim (int n, int m, int p)
{
    int min;
    
    min = n;
    if (min > m) min = m;
    if (min > p) min = p;
    return min;
}

int main()
{
    FILE *f, *g;
    
    int N, i, j, min; //N = nr de linii si coloane
    int LP, NP = 0, LR, NR = 0;
    
    f = fopen("figuri2.in", "r");
    g = fopen("figuri2.out", "w");
    
    fscanf(f, "%d", &N);
    
    for (i=0; i<N; i++)
        for (j=0; j<N; j++)
        {
            m[i][j] = 0;
            aux1[i][j] = 0;
            aux2[i][j] = 0;
        }
        
    for (i=0; i<N; i++)
    {
        for (j=0; j<N; j++)
        {
            fscanf(f, "%01d", &m[i][j]);
        }
    }
    
    for (i=0; i<N; i++)
        for (j=0; j<N; j++)
        {
            if (m[i][j] == 1) 
            {
                if(vecin(i, j-1) == 1 && vecin (i-1, j-1) == 1 && vecin (i-1, j) == 1)        
                    aux1[i][j] = minim (vecin1 (i, j-1), vecin1 (i-1, j-1), vecin1 (i-1, j)) + 1;
                else aux1[i][j] = 1;
                if(vecin(i-1, j-1) == 1 && vecin(i-1, j) == 1 && vecin(i-1, j+1) == 1)
                {
                    min = minim(vecin2(i-1, j-1), vecin2(i-1, j), vecin2(i-1, j+1));  
                    if(vecin(i-2*min, j) == 1)        
                       aux2[i][j] = min + 1;
                    else
                        aux2[i][j] = min;
                }
                else aux2[i][j] = 1;
                
            }    
            else 
            {
                 aux1[i][j] = 0;   
                 aux2[i][j] = 0;
            }  
        }
    
    
    LP = aux1[0][0];
    LR = aux2[0][0];
    
    for (i=0; i<N; i++)
        for (j=0; j<N; j++)
        {
            if (LP < aux1[i][j]) LP = aux1[i][j];
            if (LR < aux2[i][j]) LR = aux2[i][j];
        }   
            
    for (i=0; i<N; i++)
        for (j=0; j<N; j++)
        {
            if (aux1[i][j] == LP) NP++;
            if (aux2[i][j] == LR) NR++;
        }
        
    fprintf(g, "%d %d\n%d %d\n", LP, NP, LR, NR);
    
    fclose(f);
    fclose(g);
    
    return 0;
}