Cod sursa(job #466414)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 26 iunie 2010 16:09:28
Problema Fibo3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream.h>
 ifstream f("fibo3.in");
  ofstream g("fibo3.out");
  long long n,s1,s2,j5,j2,i,j,fib[1000],p1,p2,su1,su2,c1,c2,len,rez;
	int cb(int in,int sf,int find){
		while(in<=sf){
			int m=(in+sf)/2;
			if(fib[m]==find) return m;
			else
			if(fib[m]<find){
				in=m+1;
			}
			else{
				sf=m-1;
			}
		}
		return 0;
	}
	int main(){
		f>>n;
		fib[1]=1;
		fib[2]=1;
		for(i=3;fib[i-1]<1000000;++i){
			fib[i]=fib[i-1]+fib[i-2];
			len=i;
		}
		for(i=1;i<=n;++i){
			f>>s1>>s2>>j5>>j2;
			if(s1!=j5 && s2!=j2){
				su1=s1+s2;
				su2=j5+j2;
				for(c1=1;su1>fib[c1];++c1);
				for(c2=su2;su2<fib[c2];--c2);
				if(c1==0) c1=p1;
				if(c2==0) c2=p2;
				rez=c2-c1+1;
				rez=rez*2;
				if(cb(1,len,su1)) --rez;
				if(cb(1,len,su2)) --rez;
			}
			else{
				su1=s1+s2;
				su2=j5+j2;
				//c1=cb1(1,len,su1);
				//c2=cb2(1,len,su2);
				for(c1=1;su1>fib[c1];++c1);
				for(c2=su2;su2<fib[c2];--c2);
				if(c1==0) c1=p1;
				if(c2==0) c2=p2;
				rez=c2-c1+1;
			}
			g<<rez<<'\n';
		}
		g.close();
		return 0;
	}