Pagini recente » Cod sursa (job #937839) | Cod sursa (job #833767)
Cod sursa(job #833767)
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int cadran(int k, int x, int y)
{
long long val = pow(2.0, k);
if ((x <= val / 2) && (y <= val / 2)) {
cout << "Cadran 4" << endl;
return 4;
}
if ((x > val / 2) && (y <= val / 2)) {
cout << "Cadran 1" << endl;
return 1;
}
if ((x > val / 2) && (y > val / 2)) {
cout << "Cadran 2" << endl;
return 2;
}
if ((x <= val/ 2) && (y > val / 2)) {
cout << "Cadran 3" << endl;
return 3;
}
cout << "ABIS";
return -1;
}
int count(int k)
{
if (k == 1) {
return 3;
}
return 4*count(--k) + 3;
}
int count(int k, int x, int y)
{
cout << "K: " << k << " X: " << x << " Y: " << y << endl;
if (k == 1) {
if (x == 1 && y == 1) {
return 0;
}
if (x == 1 && y == 2) {
return 1;
}
if (x == 2 && y == 1) {
return 3;
}
return 2;
}
if (cadran(k, x, y) == 4) {
return count(--k, y, x);
} else if (cadran(k, x, y) == 3) {
return 1 + count(k - 1) + count(--k, x, (y + 1) / 2);
} else if (cadran(k, x, y) == 2) {
return 2 + 2*count(k - 1) + count(--k, (x + 1) / 2, (y + 1) / 2);
} else if (cadran(k, x, y) == 1) {
long long val = pow(2.0, k - 1);
x = x / 2;
return 3 + 3*count(k - 1) + count(--k, val - y + 1, (val + 1 - x));
}
return -1;
}
int main()
{
FILE *f = fopen("fractal.in", "rt");
FILE *g = fopen("fractal.out", "wt");
int x, y, k;
fscanf (f, "%d%d%d", &k, &x, &y);
fprintf(g, "%d", count(k, x, y));
/* cout << count(3, 5, 1);
cout << endl; */
return 0;
}