Pagini recente » Cod sursa (job #1337973) | Cod sursa (job #2652752) | Cod sursa (job #1246862) | Cod sursa (job #1024186) | Cod sursa (job #3141893)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("piese.in");
ofstream fout("piese.out");
int k = 0;
int a[505][505];
void acopera(int i1, int j1, int i2, int j2) {
if (i1 > i2 || j1 > j2)
return;
if (i1 == i2 && j1 == j2) {
k++;
a[i1][j1] = k;
return;
}
int lat_max = min(j2 - j1 + 1, i2 - i1 + 1);
int lat = 1;
while ((lat << 1) <= lat_max)
lat <<= 1;
int ni = i1 + lat - 1;
int nj = j1 + lat - 1;
k++;
for (int i = i1; i <= ni; i++) {
for (int j = j1; j <= nj; j++)
a[i][j] = k;
}
if (j2 - nj >= i2 - ni) {
acopera(i1, nj + 1, i2, j2);
acopera(ni + 1, j1, i2, nj);
} else {
acopera(ni + 1, j1, i2, j2);
acopera(i1, nj + 1, ni, j2);
}
}
int main() {
int n, m;
fin >> n >> m;
acopera(1, 1, n, m);
fout << k << '\n';
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
fout << a[i][j] << ' ';
}
fout << '\n';
}
return 0;
}