Pagini recente » Cod sursa (job #1459532) | Cod sursa (job #2414205) | Cod sursa (job #637085) | Cod sursa (job #3267316) | Cod sursa (job #492870)
Cod sursa(job #492870)
#include <cstdio>
FILE *in,*out;
const int cost[2][2]={{0,3},{1,2}};
void rot_stanga(int k,int &x,int &y)
{
int aux=(1<<k)-y+1;
y=x;
x=aux;
y=(1<<k)-y+1;
}
void rot_dreapta(int k,int &x,int &y)
{
int aux=(1<<k)-x+1;
x=y;
y=aux;
y=(1<<k)-y+1;
}
int search(int k,int x,int y)
{
if (k==0)
return 1;
int q=(1<<(k-1)),x2,y2;
x2=x<=q?0:1;
y2=y<=q?0:1;
x-=x2*q;
y-=y2*q;
if (cost[x2][y2]==0)
rot_dreapta(k-1,x,y);
if (cost[x2][y2]==3)
rot_stanga(k-1,x,y);
return search(k-1,x,y)+cost[x2][y2]*q*q;
}
int main()
{
int k,x,y;
in=fopen("fractal.in","r");
out=fopen("fractal.out","w");
fscanf(in,"%d%d%d",&k,&x,&y);
fprintf(out,"%d\n",search(k,y,x)-1);
fclose(in);
fclose(out);
return 0;
}