Cod sursa(job #439695)

Utilizator buradaandreiBurada Andrei buradaandrei Data 11 aprilie 2010 18:27:52
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.98 kb
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *fi=fopen("figuri2.in","r");
    FILE *fo=fopen("figuri2.out","w");
    int N,i,j,k=0,dmaxp=0,dmaxr=0,d=0,ok,*countp,*countr;
    char **b;

    fscanf(fi,"%d",&N);
    b=(char**)malloc(N*sizeof(char*));
    countp=(int*)calloc(N,sizeof(int));
    countr=(int*)calloc(N,sizeof(int));
    for (i=0;i<N;i++) {
        b[i]=(char*)malloc(N*sizeof(char));
        fscanf(fi,"%s",b[i]);
    }

    for (i=0;i<N;i++)
        for (j=0;j<N;j++)
            if (b[i][j]=='1') {
                //patrat
                d=0;
                do {
                    ok=1;
                    d++;
                    if (i+d>=N || j+d>=N) break;
                    for (k=0;k<=d;k++)
                        if (b[i+d][j+k]!='1' || b[i+k][j+d]!='1') {
                            ok=0;
                            break;
                        }
                }
                while (ok);
                if (d>dmaxp) {
                    dmaxp=d;
                    countp[d]++;
                }
                else if (d==dmaxp) {
                    countp[d]++;
                }

                //romb
                d=0;
                do {
                    ok=1;
                    d++;
                    if (i+d>=N || i-d<0 || j+d>=N || j-d<0) break;
                    for (k=0;k<=d;k++)
                        if (b[i+k][j+d-k]!='1' || b[i+k][j-d+k]!='1' || b[i-k][j+d-k]!='1' || b[i-k][j-d+k]!='1') {
                            ok=0;
                            break;
                        }
                }
                while (ok);
                if (d>dmaxr) {
                    dmaxr=d;
                    countr[d]++;
                }
                else if (d==dmaxr) {
                    countr[d]++;
                }
            }

    fprintf(fo,"%d %d\n%d %d",dmaxp,countp[dmaxp],dmaxr,countr[dmaxr]);

    fclose(fi);
    fclose(fo);
    return 0;
}