Cod sursa(job #2172977)

Utilizator GiihuoTihufiNeacsu Stefan GiihuoTihufi Data 15 martie 2018 19:28:01
Problema Piese Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

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

int T[502][502]={0},k=0;

void Fill(int x1,int y1,int x2,int y2)
{
    if(x1<x2 && y1<y2)
    {
        if(x1==x2 && y1==y2) ;
        else
        {
            k++;
            int lx=x2-x1+1, ly=y2-y1+1;
            int l=min(lx,ly), p=(1<<(int)log2(l));
            int x3=x1+p-1,y3=y1+p-1;
            T[x1][y1]+=k,
            T[x1][y3+1]-=k,
            T[x3+1][y1]-=k,
            T[x3+1][y3+1]+=k;
            Fill(x3+1,y1,x2,y3);
            Fill(x1,y3+1,x3,y2);
            Fill(x3+1,y3+1,x2,y2);
        }
    }
}

int main()
{
    int N,M;
    f>>N>>M;
    Fill(1,1,M,N);
    for(int i=1;i<=M;i++)
    {
        for(int j=1;j<=N;j++)
        {
            T[i][j]+=T[i-1][j]+T[i][j-1]-T[i-1][j-1];
            if(T[i][j]==0) k++,T[i][j]=k,T[i+1][j]-=k,T[i][j+1]-=k,T[i+1][j+1]+=k;
        }
    }
    g<<k<<'\n';
    for(int i=1;i<=M;i++)
    {
        for(int j=1;j<=N;j++) g<<T[i][j]<<' ';
        g<<'\n';
    }
    return 0;
}