Pagini recente » Cod sursa (job #2663527) | Cod sursa (job #2632619) | Cod sursa (job #292406) | Cod sursa (job #1228860) | Cod sursa (job #163534)
Cod sursa(job #163534)
#include<stdio.h>
#define INPUT "fractal.in"
#define OUTPUT "fractal.out"
FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");
int ordin, pozX, pozY;
void readValues();
long long solveFunction(int, int, int);
int main()
{
readValues();
fprintf(fout, "%lld\n", solveFunction(ordin, pozY, pozX));
fclose(fin);
fclose(fout);
return 0;
}
void readValues()
{
fscanf(fin, "%d %d %d", &ordin, &pozX, &pozY);
}
long long solveFunction(int ordin, int X, int Y)
{
int ordinCur = 1 << ordin;
int jumOrd = ordinCur / 2;
if(ordin==1)
{
if(X == 1 && Y == 1) return 0;
if(X == 2 && Y == 1) return 1;
if(X == 2 && Y == 2) return 2;
if(X == 1 && Y == 2) return 3;
}
if(X <= ordinCur / 2 && Y <= ordinCur / 2)
{
return (jumOrd * jumOrd - 1 - solveFunction(ordin - 1, Y, jumOrd - X + 1));
}
else
if(X > ordinCur / 2 && Y <= ordinCur / 2)
{
return (jumOrd * jumOrd + solveFunction(ordin-1, X, Y - jumOrd));
}
else
if(X <= ordinCur / 2 && Y > ordinCur / 2)
{
return ((jumOrd * jumOrd - 1)* 4 + 3 - solveFunction(ordin-1, 2*jumOrd - Y + 1, X));
}
else
if(X > ordinCur / 2 && Y > ordinCur / 2)
{
return ((jumOrd * jumOrd -1 )* 2 + 2 + solveFunction(ordin-1, X - jumOrd, Y - jumOrd));
}
}