Cod sursa(job #1308918)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 4 ianuarie 2015 21:03:42
Problema Divk Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>
int a[1001][1001];
int b[1001][1001];
int ct[1001];
int n;
int minim(int a,int b,int c)
{
    if(a>b)
    {
        if(b>c) return c;
        return b;
    }
    else
    {
        if(a>c) return c;
        return a;
    }
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("custi.in","r");
    fout=fopen("custi.out","w");
    fscanf(fin,"%d",&n);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            fscanf(fin,"%d",&b[i][j]);
            if(b[i][j]==1) ct[1]++;
        }
    }
    for(int i=1;i<=n;i++)
    {
        a[i][1]=b[i][1];
        a[1][i]=b[1][i];
    }
    for(int i=2;i<=n;i++)
    {
        for(int j=2;j<=n;j++)
        {
            if(b[i][j]==1)
            {
                a[i][j]=minim(a[i-1][j],a[i-1][j-1],a[i][j-1])+1;
                if(a[i][j]!=1)
                {
                    ct[a[i][j]]++;
                }
            }
            else a[i][j]=0;
        }
    }
    int s=0;
    for(int i=2;i<=n;i++)
    {
        s+=ct[i];
    }
    int temp;
    fprintf(fout,"%d\n",ct[1]);
    for(int i=2;i<=n;i++)
    {
        temp=ct[i];
        ct[i]=s;
        s-=temp;
        fprintf(fout,"%d\n",ct[i]);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}