Pagini recente » Cod sursa (job #1177448) | Cod sursa (job #504989) | Cod sursa (job #1296555) | Cod sursa (job #1189403) | Cod sursa (job #2893544)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin( "piese.in" );
ofstream fout( "piese.out" );
const int DIM = 505;
int T[DIM][DIM];
int lg[DIM];
int cnt;
void cover( int l1, int c1, int l2, int c2 ) {
if ( l1 > l2 || c1 > c2 ) return;
if ( l1 == l2 ) {
for ( int j = c1; j <= c2; ++j ) {
T[l1][j] = ++cnt;
}
return;
}
if ( c1 == c2 ) {
for ( int i = l1; i <= l2; ++i ) {
T[i][c1] = ++cnt;
}
return;
}
int k = min(l2 - l1 + 1, c2 - c1 + 1);
int q = (1 << lg[k]);
++cnt;
for ( int i = l1; i < l1 + q; ++i ) {
for ( int j = c1; j < c1 + q; ++j ) {
T[i][j] = cnt;
}
}
cover( l1 + q, c1, l2, c1 + q-1 );
cover( l1, c1 + q, l1 + q-1, c2 );
cover( l1 + q, c1 + q, l2, c2 );
}
int main() {
int n, m;
fin >> n >> m;
for ( int i = 2; i < DIM; ++i ) {
lg[i] = lg[i / 2] + 1;
}
cover(0, 0, n-1, m-1);
fout << cnt << "\n";
for ( int i = 0; i < n; ++i ) {
for ( int j = 0; j < m; ++j ) {
fout << T[i][j] << " ";
}
fout << "\n";
}
fin.close();
fout.close();
return 0;
}