Cod sursa(job #1151918)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 24 martie 2014 13:57:25
Problema Piese Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream>
#define NMAX 510

using namespace std;

ifstream f("piese.in");
ofstream g("piese.out");

int i, j, n, m, nr=0, ap[NMAX], lim, a[NMAX][NMAX];

void Formeaza(int is, int js, int ij, int jj)
{
    int val1=ij-is+1, val2=jj-js+1, c;

    if (is>0 && is<n+1 && ij>0 && ij<n+1 && js>0 && js<m+1 && jj>0 && jj<m+1)
        if (val1==val2 && (val1 & (val1-1))==0 && (val2 & (val2-1))==0)
        {
            int i, j;
            ++nr;
            for (i=is; i<=ij; ++i)
                for (j=js; j<=jj; ++j) a[i][j]=nr;
        }
        else
        {
            c=1<<ap[min(val1, val2)];
            Formeaza(is, js, is+c-1, js+c-1);
            //Formeaza(is, js+c, is+c-1, jj);
            Formeaza(is+c, js, ij, js+c-1);
            Formeaza(is, js+c, ij, jj);
        }
}

int main()
{
    f>>n>>m; lim=max(n, m);
    for (i=2; i<=lim; ++i)
        ap[i]=ap[i>>1]+1;
    Formeaza(1, 1, n, m);

    g<<nr<<"\n";
    for (i=1; i<=n; ++i)
    {
        for (j=1; j<=m; ++j) g<<a[i][j]<<" ";
        g<<"\n";
    }

    f.close();
    g.close();
    return 0;
}