Cod sursa(job #822106)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 22 noiembrie 2012 21:57:50
Problema Piese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

int nr, a[505][505];
int n, m;

inline void Read()
{
    ifstream f("piese.in");
    f>>n>>m;
    f.close();
}

inline void Acopera(int x1, int y1, int x2, int y2)
{
    nr++;

    int lg;
    lg = min (x2 - x1 + 1, y2 - y1 + 1);

    int p;
    p = 1;
    while (p<=lg)
    {
        p *= 2;
    }
    p/=2;

    int i, j, np, mp;
    np = x1 + p - 1;
    mp = y1 + p - 1;
    for(i=x1; i<=np; i++)
        for(j=y1; j<=mp; j++)
            a[i][j] = nr;


    if (mp < y2)
        Acopera(x1, mp+1, x2, y2);

    if (np < x2 && mp <= y2)
        Acopera(np+1, y1, x2, mp);
}

inline void Solve()
{
    Acopera(1, 1, n, m);
}

inline void Write()
{
    ofstream g("piese.out");
    g<<nr<<"\n";
    int i, j;
    for(i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
            g<<a[i][j]<<" ";
        g<<"\n";
    }
    g.close();
}

int main()
{
    Read();
    Solve();
    Write();
    return 0;
}