Cod sursa(job #377806)

Utilizator DraStiKDragos Oprica DraStiK Data 26 decembrie 2009 14:09:06
Problema Piese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <algorithm>
using namespace std;

#define DIM 505

int put[10]={1,2,4,8,16,32,64,128,256,512};
int a[DIM][DIM];
int n,m,nrmin;

int find (int val)
{
    int i;

    for (i=0; val>=put[i]; ++i);

    return i-1;
}

void umple (int x1,int y1,int x2,int y2)
{
    int i,j,f;

    if (x2<x1 || y2<y1)
        return ;

    f=find (min (x2-x1+1,y2-y1+1));
    ++nrmin;
    for (i=x1; i<x1+(1<<f); ++i)
        for (j=y1; j<y1+(1<<f); ++j)
            a[i][j]=nrmin;
    umple (x1,y1+(1<<f),x1+(1<<f)-1,y2);
    umple (x1+(1<<f),y1,x2,y2);
}

void print ()
{
    int i,j;

    printf ("%d\n",nrmin);
    for (i=1; i<=n; ++i)
    {
        for (j=1; j<=m; ++j)
            printf ("%d ",a[i][j]);
        printf ("\n");
    }
}

int main ()
{
    freopen ("piese.in","r",stdin);
    freopen ("piese.out","w",stdout);

    scanf ("%d%d",&n,&m);
    umple (1,1,n,m);
    print ();

    return 0;
}