Pagini recente » Cod sursa (job #2454264) | Cod sursa (job #1961077) | Cod sursa (job #1815313) | Cod sursa (job #832755) | Cod sursa (job #822106)
Cod sursa(job #822106)
#include <iostream>
#include <fstream>
using namespace std;
int nr, a[505][505];
int n, m;
inline void Read()
{
ifstream f("piese.in");
f>>n>>m;
f.close();
}
inline void Acopera(int x1, int y1, int x2, int y2)
{
nr++;
int lg;
lg = min (x2 - x1 + 1, y2 - y1 + 1);
int p;
p = 1;
while (p<=lg)
{
p *= 2;
}
p/=2;
int i, j, np, mp;
np = x1 + p - 1;
mp = y1 + p - 1;
for(i=x1; i<=np; i++)
for(j=y1; j<=mp; j++)
a[i][j] = nr;
if (mp < y2)
Acopera(x1, mp+1, x2, y2);
if (np < x2 && mp <= y2)
Acopera(np+1, y1, x2, mp);
}
inline void Solve()
{
Acopera(1, 1, n, m);
}
inline void Write()
{
ofstream g("piese.out");
g<<nr<<"\n";
int i, j;
for(i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
g<<a[i][j]<<" ";
g<<"\n";
}
g.close();
}
int main()
{
Read();
Solve();
Write();
return 0;
}