Pagini recente » Cod sursa (job #1502712) | Cod sursa (job #1806352) | Cod sursa (job #2030215) | Cod sursa (job #276092) | Cod sursa (job #2227686)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("fractal.in");
ofstream fout("fractal.out");
int recursiv(int k,int x,int y)
{
if(k==0) return 0;
if(k==1)
{
if(x==1 and y==1) return 0;
if(x==1 and y==2) return 1;
if(x==2 and y==2) return 2;
if(x==2 and y==1) return 3;
}
int p=(1<<(k-1)); /// 2^(k-1)
if(x<=p and y<=p)
{
return recursiv(k-1,y,x);
/// ne aflam in patratul din stanga sus;
}
if(x<=p and y>p)
{
return (p*p + recursiv(k-1,x,y-p)); /// p*p ca sa trecem de primul patrat
/// ne aflam in patratul din stanga jos;
}
if(x>p and y>p)
{
return (2*p*p + recursiv(k-1,x-p,y-p)); /// 2*p*p ca sa trecem de primele 2 patrate;
/// ne aflam in patratul din dreapta jos;
}
if(x>p and y<=p)
{
return (3*p*p + recursiv(k-1,p-y+1,2*p-x+1)); /// 3*p*p ca sa trecem de primele 3 patrate;
/// ne aflam in patratul din dreapta sus;
}
/// cazul 2=3;
/// cazul 1 inversul cazului 4;
return 0;
}
int main()
{
int k,x,y;
fin >> k >> x >> y;
fout << recursiv(k,x,y);
return 0;
}