Pagini recente » Cod sursa (job #506941) | Cod sursa (job #2402105) | Cod sursa (job #2430794) | Cod sursa (job #1825172) | Cod sursa (job #1687678)
#include <fstream>
using namespace std;
ifstream fin("fractal.in");
ofstream fout("fractal.out");
int K, x, y, N;
int nr;
void construire(int l1, int c1, int l2, int c2, int cadr)
{
int lm, cm;
if (l2-l1==1)
{
if (cadr==1)
{
if (x==l1 && y==c1)
fout << nr;
nr++;
if (x==l1 && y==c2)
fout << nr;
nr++;
if (x==l2 && y==c2)
fout << nr;
nr++;
if (x==l2 && y==c1)
fout << nr;
nr++;
}
if (cadr==2)
{
if (x==l1 && y==c2)
fout << nr;
nr++;
if (x==l1 && y==c1)
fout << nr;
nr++;
if (x==l2 && y==c1)
fout << nr;
nr++;
if (x==l2 && y==c2)
fout << nr;
nr++;
}
if (cadr==3 || cadr==4)
{
if (x==l1 && y==c1)
fout << nr;
nr++;
if (x==l2 && y==c1)
fout << nr;
nr++;
if (x==l2 && y==c2)
fout << nr;
nr++;
if (x==l1 && y==c2)
fout << nr;
nr++;
fout << '\n';
}
}
else
{
lm=(l1+l2) / 2;
cm=(c1+c2) / 2;
if (l1<=x && x<=lm && c1<=y && y<=cm)
construire(l1, c1, lm, cm, 1);
nr+=(l2-l1)*(l2-l1);
if (lm+1<=x && x<=l2 && c1<=y && y<=cm)
construire(lm+1, c1, l2, cm, 3);
nr+=(cm-c1)*(cm-c1);
if (lm+1<=x && x<=l2 && cm+1<=y && y<=c2)
construire(lm+1, cm+1, l2, c2, 4);
nr+=(l2-lm-1)*(l2-lm-1);
if (l1<=x && x<=lm && cm+1<=y && y<=c2)
construire(l1, cm+1, lm, c2, 2);
nr+=(lm-l1)*(lm-l1);
}
}
int main()
{
fin >> K >> x >> y;
N=1 << K;
construire(1, 1, N, N, 1);
fin.close();
fout.close();
return 0;
}