Pagini recente » Istoria paginii implica-te/arhiva-educationala | Lista propunatori infoarena-friendly | Diferente pentru implica-te/arhiva-educationala intre reviziile 174 si 175 | Cod sursa (job #2027974) | Cod sursa (job #30792)
Cod sursa(job #30792)
#include<stdio.h>
long int k,x,y,sol,doila[16],patrula[16],i,j;
int doi();
int patru();
long int fract(long int p,long int a,long int b);
int main()
{ doi();
patru();
FILE *f,*g;
f=fopen("fractal.in","r");
g=fopen("fractal.out","w");
fscanf(f,"%ld%ld%ld",&k,&x,&y);
sol=fract(k,y,x);
sol=sol-1;
if(sol) fprintf(g,"%ld",sol);
fprintf(g,"\n");
fcloseall();
return 0;
}
int doi()
{
doila[0]=1;
for(i=1;i<=15;i++)
doila[i]=2*doila[i-1];
return 0;
}
int patru()
{
patrula[0]=1;
for(i=1;i<=15;i++)
patrula[i]=4*patrula[i-1];
return 0;
}
long int fract(long int p,long int a,long int b)
{
if(p==0) return 1;
if(a<=doila[p-1])
{ if(b<=doila[p-1]) return fract(p-1,b,a);
return 3*patrula[p-1]+fract(p-1,2*doila[p-1]+1-b,doila[p-1]+1-a);}
if(b<=doila[p-1]) return patrula[p-1]+fract(p-1,a-doila[p-1],b);
return 2*patrula[p-1]+fract(p-1,a-doila[p-1],b-doila[p-1]);
}