Cod sursa(job #30792)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 15 martie 2007 08:58:21
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#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]);
}