Pagini recente » Cod sursa (job #1312988) | Cod sursa (job #2402559) | Cod sursa (job #1081095) | Cod sursa (job #1262703) | Cod sursa (job #2739605)
#include <iostream>
#include<fstream>
#include<cmath>
#include<math.h>
#define x first
#define y second
using namespace std;
ifstream f("fractal.in");
ofstream g("fractal.out");
int n;
pair<int, int> dest;
long long dim;
long long fractal(long long dim, pair<int, int>& p)
{
long long lim= sqrt(dim>>2);
long long div = dim >> 2;
if (dim == 1)
return 1;
if (p.x >= 1 && p.x <= lim && p.y >= 1 && p.y <= lim)
{
swap(p.x, p.y);
return fractal(div, p);
}
if (p.x > lim && p.x <= 2* lim && p.y >= 1 && p.y <= lim)
{
p.x = p.x % lim;
if (p.x == 0)
p.x = lim;
return (div) + fractal(div, p);
}
if (p.x > lim && p.x <= 2* lim && p.y > lim && p.y <= 2* lim)
{
p.x = p.x % lim;
if (p.x == 0)
p.x = lim;
p.y = p.y % lim;
if (p.y == 0)
p.y = lim;
return 2*div + fractal(div, p);
}
if (p.x >= 1 && p.x <= lim && p.y > lim && p.y <= 2* lim)
{
p.y = p.y % lim;
if (p.y == 0)
p.y = lim;
long long a = lim - p.y + 1;
long long b = lim - p.x + 1;
p.x = a;
p.y = b;
return 3*div + fractal(div, p);
}
}
int main()
{
f >> n >> dest.y >> dest.x;
dim = (1 << (n << 1));
g << fractal(dim, dest) - 1;
return 0;
}