Pagini recente » Cod sursa (job #3223144) | Cod sursa (job #2791108) | Cod sursa (job #382522) | Cod sursa (job #680309) | Cod sursa (job #2137710)
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#define NMAX (100000 + 3)
using namespace std;
int main() {
ifstream f("fractal.in");
ofstream g("fractal.out");
int k, x, y, length;
unsigned long long steps = 0;
f >> k >> x >> y;
for (length = 1; k > 0; length *= 2, --k);
int lx = 1, ly = 1, rx = length, ry = length, rotation = 0;
length /= 2;
while (rx - lx > 2) {
int mx = (lx + rx) / 2;
int my = (ly + ry) / 2;
if (x <= mx && y <= my) { // cazul 1
rx = mx;
ry = my;
rotation = (rotation + 3) % 4;
} else {
if (x <= mx && y >= my) { // cazul 2
rx = mx;
ly = my;
steps += length * length;
} else {
if (x > mx && y > my) { // cazul 3
lx = mx;
ly = my;
steps += 2 * length * length;
} else { // cazul 4
lx = mx;
ry = my;
rotation = (rotation + 1) % 4;
steps += 3 * length * length;
}
}
}
}
if (rotation == 0) {
if (x == lx && y == ly) {
steps += 0;
} else {
if (x == lx && y == ry) {
steps += 1;
} else {
if (x == rx && y == ry) {
steps += 2;
} else {
steps += 3;
}
}
}
} else {
if (rotation == 1) {
if (x == lx && y == ly) {
steps += 2;
} else {
if (x == lx && y == ry) {
steps += 1;
} else {
if (x == rx && y == ry) {
steps += 0;
} else {
steps += 3;
}
}
}
} else {
if (rotation == 2) {
if (x == lx && y == ly) {
steps += 1;
} else {
if (x == lx && y == ry) {
steps += 0;
} else {
if (x == rx && y == ry) {
steps += 3;
} else {
steps += 2;
}
}
}
} else {
if (x == lx && y == ly) {
steps += 0;
} else {
if (x == lx && y == ry) {
steps += 3;
} else {
if (x == rx && y == ry) {
steps += 2;
} else {
steps += 1;
}
}
}
}
}
}
g << steps;
return 0;
}