Cod sursa(job #1966796)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 15 aprilie 2017 16:27:42
Problema Piese Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>

using namespace std;

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

int n, m, i, doi[30], a[502][502], maxim;

void aseaza(int x, int y, int nr)
{
    int latime = min(n - x, m - y) + 1;
    int i = 0;
    for(i = 0; ; ++ i)
    {
        if( doi[i] > latime )
            break;
    }
    latime  = doi[i - 1];
    int  j = 0;
    for(i = x; i <= x + latime - 1; ++ i)
    {
        for(j = y; j <= y + latime - 1; ++ j)
            a[i][j] = nr;
    }

    int ok = 1;

    int xv = 0, yv = 0;

    for(i = 1; i <= n && ok == 1; ++ i)
    {
        for(j = 1; j <= m && ok == 1; ++ j)
        {
            if(a[i][j] == 0)
            {
                xv = i;
                yv = j;
                ok = 0;
            }
        }
    }

    if(nr > maxim) maxim = nr;

    if( ok == 0 ) aseaza(xv, yv, nr + 1);


}

int main()
{
    f>>n>>m;

    doi[0] = 1;
    for(i = 1; i <= 10; ++ i)
        doi[i] = doi[i-1] * 2;

    aseaza(1, 1, 1);

    g<<maxim<<'\n';

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

    return 0;
}