Pagini recente » Monitorul de evaluare | Cod sursa (job #3196568) | Cod sursa (job #766714) | Cod sursa (job #2678869) | Cod sursa (job #403821)
Cod sursa(job #403821)
#include<stdio.h>
FILE *f=fopen("fractal.in","r");
FILE *g=fopen("fractal.out","w");
long long k,x,y,nr,p[16],poz;
void divid(int a){
if(poz==1){
//daca este in C1
if(x<=p[a]/2&&y<=p[a]/2){
poz=2;
return;
}
//daca este in C2
if(x>p[a]/2&&y<=p[a]/2)
{ nr+=p[2*(a-1)];
x-=p[a]/2;
poz=1;
return;
}
//daca este in C3
if(x>p[a]/2&&y>p[a]/2)
{ nr+=2*p[2*(a-1)];
x-=p[a]/2;
y-=p[a]/2;
poz=1;
return;
}
//daca este in C4
if(x<=p[a]/2&&y>p[a]/2)
{ nr+=3*p[2*(a-1)];
y-=p[a]/2;
poz=3;
return;
}
}
else if(poz==2){
//daca este in C1
if(x<=p[a]/2&&y<=p[a]/2){
poz=1;
return;
}
//daca este in C2
if(x<=p[a]/2&&y>p[a]/2)
{ nr+=p[2*(a-1)];
x-=p[a]/2;
poz=1;
return;
}
//daca este in C3
if(x>p[a]/2&&y>p[a]/2)
{ nr+=2*p[2*(a-1)];
x-=p[a]/2;
y-=p[a]/2;
poz=1;
return;
}
//daca este in C4
if(x>p[a]/2&&y<=p[a]/2)
{ nr+=3*p[2*(a-1)];
x-=p[a]/2;
poz=4;
return;
}
}
else if(poz==3){
//daca este in C1
if(x>p[a]/2&&y<=p[a]/2){
poz=2;
return;
}
//daca este in C2
if(x>p[a]/2&&y>p[a]/2)
{ nr+=p[2*(a-1)];
x-=p[a]/2;
poz=1;
return;
}
//daca este in C3
if(x<=p[a]/2&&y<=p[a]/2)
{ nr+=2*p[2*(a-1)];
x-=p[a]/2;
y-=p[a]/2;
poz=1;
return;
}
//daca este in C4
if(x<=p[a]/2&&y>p[a]/2)
{ nr+=3*p[2*(a-1)];
//y-=p[a]/2;
poz=3;
return;
}
}
}
int main(){
p[0]=1;
fscanf(f,"%lld%lld%lld",&k,&y,&x);
nr=0; poz=1;
for(int i=1;i<=2*k;i++)
p[i]=p[i-1]*2; //ridicam 2 la puterea k
while(k>1){
divid(k);
k--;
}
if(poz==1){
if(x==2&&y==1)
nr++;
else if(x==2&&y==2)
nr=nr+2;
else if(x==1&&y==2)
nr=nr+3;
}
else if(poz==2){
if(x==2&&y==1)
nr+=3;
else if(x==1&&y==2)
nr+=1;
else if(x==2&&y==2)
nr+=2;
}
else if(poz==3){
if(x==1&&y==1)
nr+=2;
else if(x==1&&y==2)
nr+=3;
else if(x==2&&y==1)
nr+=1;
}
else if(poz==4){
if(x==1&&y==2)
nr++;
else if(x==1&&y==1)
nr+=2;
else if(x==2&&y==1)
nr+=3;
}
fprintf(g,"%lld",nr);
return 0;
}