Cod sursa(job #466531)

Utilizator SheepBOYFelix Liviu SheepBOY Data 26 iunie 2010 22:19:05
Problema Fibo3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
#include<conio.h>
long long Fibo[80];
int nof,n;

void OpenGate()
{
	freopen("fibo3.in","r",stdin);
	freopen("fibo3.out","w",stdout);
}

void GenerateFibo()
{
	int i;
	
	nof=78;
	Fibo[0]=1;
	Fibo[1]=1;
	for(i=2;i<nof;++i)
		Fibo[i]=Fibo[i-1]+Fibo[i-2];
}
inline long long abs(long long a,long long b)
{
	a-=b;
	return (a<0)?-a:a; 
}
void ReadSolveData()
{
	long long lx,ly,sx,sy,noe;
	lx=ly=sx=sy=0;
	long long l,c,min,max,aux;
	int p,u,i,rez=0;
	p=u=0;
	
	scanf("%d",&n);
	while(n)
	{
		scanf("%lld%lld%lld%lld",&lx,&ly,&sx,&sy);// solve under
		
		rez=0;
		
		l=abs(lx,sx)+1;
		c=abs(ly,sy)+1;
		
		min=lx+ly;
		max=sx+sy;
		
		if(min>max)
		{
			aux=min;
			min=max;
			max=aux;
		}
		
		if(l>c)
		{
			aux=c;
			c=l;
			l=aux;
		}
		
		int pos=0;
		i=1;// to avoid double counting of 1
		//find fibo;
		while(min>Fibo[i])++i;
		
		while(max>=Fibo[i])
		{
			pos=Fibo[i]-min+1;//establish position
			
			if(pos<=l)
				rez+=pos;
			else
			{
				if(pos>=l && pos<= c)
					rez+=l;
				else
					rez+=(c-(pos%c));
			}
			
			++i;
		}
		printf("%d\n",rez);
		--n;
	}
}

int main()
{
	OpenGate();
	GenerateFibo();
	ReadSolveData();
	return 0;
}