Pagini recente » Cod sursa (job #2097451) | Cod sursa (job #2865437) | Cod sursa (job #2831350) | Cod sursa (job #2213349) | Cod sursa (job #1815841)
// ConsoleApplication2.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <fstream>
using namespace std;
int k;
long long powerK;
long long globalX, globalY;
int cadran;
long long level_steps;
long long rezultat = 0;
int quadr(long long x, long long y, long long twoPow) {
if ((x <= twoPow) && (y <= twoPow))
return 1;
if ((x >= (twoPow + 1)) && (y <= twoPow))
return 2;
if ((x >= (twoPow + 1)) && (y >= (twoPow + 1)))
return 3;
if((x <= twoPow) && (y>= (twoPow+1)))
return 4;
}
void project(long long x, long long y, int cadran) {
if (cadran == 1) {
globalY = x;
globalX = y;
//printf("Ma aflu in cadranul %d \n", cadran);
}
if (cadran == 2) {
globalX = x - (powerK >> 1);
globalY = y;
//printf("Ma aflu in cadranul %d \n", cadran);
}
if (cadran == 3) {
globalX = x - (powerK >> 1);
globalY = y - (powerK >> 1);
//printf("Ma aflu in cadranul %d \n", cadran);
}
if (cadran == 4) {
globalY = (powerK >> 1) - x + 1;
globalX = powerK - y + 1;
//printf("LA acest pas x este %d si powerK este %d \n", x,powerK);
//printf("Ma aflu in cadranul %d \n", cadran);
}
}
long long maxSteps(int n) {
return (1 << 2 * (n - 1)) - 1;
}
void result(long long x, long long y, long long putere) {
//printf("Punctul [%d,%d]\n", x, y);
if (putere == 2) {
if (x == 1 && y == 1)
rezultat += 0;
else
if (x == 2 && y == 1)
rezultat += 1;
else
if (x == 2 && y == 2)
rezultat += 2;
else
if (x == 1 && y == 2)
rezultat += 3;
}
else
{
cadran = quadr(x, y, (powerK >> 1));
//printf("Ma aflu in cadranul %d si puterea e %d\n", cadran,powerK);
project(x, y, cadran);
rezultat += (cadran - 1)*(level_steps + 1);
//printf("%d\n", (cadran - 1)*(level_steps + 1));
level_steps = level_steps >> 2;
powerK = powerK >> 1;
result(globalX, globalY, powerK);
}
}
int main()
{
ifstream f("fractal.in");
ofstream g("fractal.out");
f>>k>>globalY>>globalX;
//printf("%d %ld %ld",k,globalX,globalY);
//k = 10;
powerK = 1 << k;
//printf("%d\n", maxSteps(k + 1));
level_steps = maxSteps(k);
result(globalX, globalY, powerK);
g << rezultat;
//printf("%ld \n", rezultat);
}