Cod sursa(job #3143858)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 2 august 2023 16:20:10
Problema Piese Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <fstream>

using namespace std;

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

const int DIM = 501;

int n, m;
int iLength, iWidth;
int pow2[DIM];
int mat[DIM][DIM];

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

    iLength = n, iWidth = m;
    if (iLength < iWidth)
        swap(iLength, iWidth);

    pow2[1] = 0;
    for (int i = 2; i < DIM; i++)
        pow2[i] = pow2[i / 2] + 1;

    int count = 0, index = 1;
    int length = iLength, width = iWidth;
    while (width > 0) {
        int initSize = (1 << (pow2[width]));
        int xIndex = index, yIndex = 1;
        while (length > 0) {
            int currSize = (1 << (min(pow2[width], pow2[length])));

            for (int k = 1; k <= length / currSize; k++) {
                xIndex = index;
                for (int t = 1; t <= initSize / currSize; t++) {
                    count++;

                    for (int i = yIndex; i < yIndex + currSize; i++)
                        for (int j = xIndex; j < xIndex + currSize; j++)
                            mat[i][j] = count;

                    xIndex += currSize;
                }
                yIndex += currSize;
            }

            length -= currSize * (length / currSize);
        }

        index += initSize;
        width -= initSize;
        length = iLength;
    }

    fout << count << '\n';
    if (n > m) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++)
                fout << mat[i][j] << ' ';
            fout << '\n';
        }
    } else {
        for (int j = 1; j <= n; j++) {
            for (int i = m; i >= 1; i--)
                fout << mat[i][j] << ' ';
            fout << '\n';
        }
    }

    return 0;
}