Cod sursa(job #2030844)

Utilizator maria15Maria Dinca maria15 Data 2 octombrie 2017 12:48:07
Problema Piese Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>

using namespace std;

short n, i, m;
int v[503][503], ant, f[504], lung[503];

ifstream fin("piese.in");
ofstream fout("piese.out");

void umplere(short i1, short j1, short i2, short j2){
    if(i1>=1 && i1<=n && j1<=m && j1>=1 && i2>=1 && i2<=n && j2<=m && j2>=1 && i1<=i2 && j1<=j2 ){
        short a = min(i2-i1+1, j2-j1+1);
        short a1 = a;
        if(f[a1] == 0){
            f[a1]++;
            short maxim = 0, nr = 0;
            for(short i=8;i>=0;i--){
                short t = (1<<i);
                if(a1>=t){
                    maxim = i;
                    break;
                }
            }
            lung[a1] = (1<<maxim);
        }
        for(short i=i1;i<=i1+lung[a1]-1;i++)
            for(short j=j1;j<=j1+lung[a1]-1;j++)
                if(v[i][j] == 0){
                    if(j == j1 && i == i1)
                        ant++;
                    v[i][j] = ant;
                }

        umplere(i1+lung[a1], j1, n, j1+lung[a1]-1);
        umplere(i1, j1+lung[a1], i1+lung[a1]-1, m);

    }
}
int main(){
    fin>>n>>m;
    umplere(1, 1, n, m);
    fout<<ant<<"\n";
    for(short i=1;i<=n;i++){
        for(short j=1;j<=m;j++)
            fout<<v[i][j]<<" ";
        fout<<"\n";
    }
    return 0;
}