Pagini recente » Cod sursa (job #2363307) | Cod sursa (job #3292636) | Cod sursa (job #2140137) | Cod sursa (job #133167) | Cod sursa (job #1739248)
using namespace std;
#include<fstream>
ifstream f("fractal.in");
ofstream g("fractal.out");
int nr=0;
// pozitia 1 - desenul (curba) orientat(a) in jos
// pozitia 2 - desenul orientat spre stanga
// pozitia 3 - desenul orientat spre dreapta
// pozitia 4 - desenul orientat in sus
void sub(int pow, int x, int y, int poz)
{
int add=pow*pow/4;
if(pow>1)
{
if(x>pow/2)
{
if(y<=pow/2) // cadranul din dreapta sus
{
if(poz==1)
{
nr+=3*add;
poz=2;
}
else if(poz==3)
{
nr+=add;
poz=3;
}
else if(poz==4)
{
nr+=add;
poz=4;
}
else
{
nr+=3*add;
poz=1;
}
x-=pow/2;
}
else //cadranul din dreapata jos
{
if(poz==1) nr+=2*add;
else if (poz==3)
{
nr+=2*add;
poz=3;
}
else if(poz==2) poz=4;
else poz=2;
x-=pow/2;
y-=pow/2;
}
}
else
if(y>pow/2) //cadranul din stanga jos
{
if(poz==1) nr+=add;
else if(poz==2)
{
nr+=add;
poz=2;
}
else if(poz==3)
{
nr+=3*add;
poz=4;
}
else
{
nr+=3*add;
poz=3;
}
y-=pow/2;
}
else //cadranul din stanga sus
{
if(poz==2 || poz==4) nr+=2*add;
else if(poz==1) poz=3;
else poz=1;
}
sub(pow/2,x,y,poz);
}
else
{
if(x==1 && y==2) nr++;
else if (x==2 && y==2) nr+=2;
else if (x==2 && y==1) nr+=3;
}
}
int main()
{
int k,x,y,i,pow=1;
f>>k>>x>>y;
for(i=1; i<=k; i++) pow*=2;
sub(pow,x,y,1);
g<<nr;
return 0;
}