Pagini recente » Cod sursa (job #2846439) | Cod sursa (job #1046938) | Cod sursa (job #891799) | Cod sursa (job #1727128) | Cod sursa (job #568515)
Cod sursa(job #568515)
Utilizator |
roots1 roots |
Data |
31 martie 2011 12:55:42 |
Problema |
Fractal |
Scor |
100 |
Compilator |
cpp |
Status |
done |
Runda |
103 |
Marime |
1.3 kb |
#include <stdio.h>
int c1,c2,c3,c4;
int sol;
void crack(int K,int x,int y,int w)
{
int L,M,R,aux;
if(K>0)
{
L=1;
M=1<<(K-1);
R=1<<K;
if(L<=x&&x<=M)
{
if(L<=y&&y<=M)
{
sol+=c1*M*M;
if(w==1)
{
aux=c2;
c2=c4;
c4=aux;
}
else
if(w==2)
{
aux=c2;
c2=c4;
c4=aux;
}
crack(K-1,x,y,1);
}
else
if(M+1<=y&&y<=R)
{
sol+=c2*M*M;
if(w==2)
{
aux=c1;
c1=c3;
c3=aux;
}
else
if(w==3)
{
aux=c2;
c2=c4;
c4=aux;
}
crack(K-1,x,y-M,3);
}
}
else
if(M+1<=x&&x<=R)
{
if(L<=y&&y<=M)
{
sol+=c4*M*M;
if(w==1)
{
aux=c1;
c1=c3;
c3=aux;
}
else
if(w==3)
{
aux=c2;
c2=c4;
c4=aux;
}
crack(K-1,x-M,y,2);
}
else
if(M+1<=y&&y<=R)
{
sol+=c3*M*M;
if(w==3)
{
aux=c1;
c1=c2;
c2=c3;
c3=c4;
c4=aux;
}
crack(K-1,x-M,y-M,2);
}
}
}
}
int main()
{
int K,x,y;
freopen("fractal.in","r",stdin);
scanf("%d%d%d",&K,&x,&y);
sol=0;
c1=0;
c2=3;
c3=2;
c4=1;
crack(K,y,x,2);
freopen("fractal.out","w",stdout);
printf("%d\n",sol);
return 0;
}