Cod sursa(job #166114)

Utilizator luana_0105Fagarasan Luana luana_0105 Data 27 martie 2008 14:19:01
Problema Piese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>
#define nmax 505

int a[nmax][nmax],n,m,ct;
int ac;


void read()
{
     freopen("piese.in","r", stdin);
     freopen("piese.out","w",stdout);
     scanf("%d%d", &m, &n);
}

void cover ( int x1, int y1, int x2, int y2)
{
     int i,j;
     int k=1;
     while( k*2<=x2-x1+1 && k*2 <= y2-y1+1 )
        k=k*2;
     ct++;
     ac+= (k*k);
     for(i= x1; i<= x1+k-1; ++i)
      for( j= y1; j <=y1+k-1; ++j)
           a[i][j]=ct;
     if (ac == n*m) return; 
     if(x1+k<=m && y1+k-1 <= n && a[x1+k][y1]==0 && a[x2][y1+k-1]==0 )
        cover(x1+k, y1, x2, y1+k-1);
     if (ac == n*m) return;
     if(a[x1][y1+k]==0&& a[x2][y2]==0 && y1+k<=n)
        cover(x1, y1+k, x2, y2);
}

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


int main()
{
    read();
    cover(1,1,m,n);
    print();
    return 0;
}