Pagini recente » Cod sursa (job #730292) | Cod sursa (job #358310) | Cod sursa (job #22405) | Cod sursa (job #728347) | Cod sursa (job #3143858)
#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;
}