Cod sursa(job #437068)

Utilizator andra_serbanSerban Andra-Elena andra_serban Data 9 aprilie 2010 11:56:31
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.78 kb
#include<stdio.h>

int a[255][255], p[255][255], r[255][255], v[255];

int min(int a, int b, int c){             // functia calculeaza maximul dintre 3 numere a, b si c
    if(a < b && a < c)
         return a;
    if(b < c)
         return b;
    return c;
}

int main() {
    
    int i, j, N, LP = 0, NP = 0, LR = 0, NR = 0;
	
    FILE *f = fopen("figuri2.in","r");
    FILE *g = fopen("figuri2.out","w");
	
	
	fscanf(f, "%d", &N);
	
	for(i = 0; i < N; i ++) 
                fscanf(f, "%d", &v[i]);
    
    for(i = 0; i < N; i ++) {
          j = N - 1;
          while(v[i] > 0) {
                     a[i][j] = v[i] % 10  ;
                     j = j - 1;
                     v[i] = v[i] / 10;
          }
    } 
                
    for(i = 0; i < N; i ++) 
	      for(j = 0; j < N; j ++) {
                 p[i][j] = a[i][j];
                 r[i][j] = a[i][j];
       }
                
    for(i = 0; i < N; i ++) 
	      for(j = 0; j < N; j ++) {
                 if(p[i][j] == 1)  p[i][j] = min(p[i-1][j], p[i-1][j-1], p[i][j-1]) + 1;
                 if( p[i][j] > LP )  LP = p[i][j];
          }
          
    for(i = 0; i < N; i ++) 
	      for(j = 0; j < N; j ++) 
                 if( p[i][j] == LP )  NP ++;
    
    for(i = 0; i < N; i ++) 
	      for(j = 0; j < N; j ++) {
                 if(r[i][j] == 1)  r[i][j] = min(r[i-1][j-1], r[i-1][j+1], r[i-2][j]) + 1;
                 if( r[i][j] > LR )  LR = r[i][j];
          }
          
    for(i = 0; i < N; i ++) 
	      for(j = 0; j < N; j ++) 
                 if( r[i][j] == LR )  NR ++;
        
    printf("%d %d", LR, NR);
    fprintf(g, "%d %d", LP, NP);
    fprintf(g, "\n");
    fprintf(g, "%d %d", LR, NR);
    
    return 0;
    
}