Cod sursa(job #2022252)

Utilizator Vlad3108Tir Vlad Ioan Vlad3108 Data 16 septembrie 2017 01:34:50
Problema Fibo3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;
long long fib[80];
int k;
const long long last=2*pow(10,15);
class Cord{
public:
    long long x,y;
};
void Fibo(){
    fib[0]=fib[1]=1;
    for(k=2;fib[k-1]+fib[k-2]<=last;++k)
        fib[k]=fib[k-1]+fib[k-2];
    --k;
}
long long Count(Cord A,Cord B){
    long long cnt=0;
    int i;
    for(i=1;i<=k&&fib[i]<A.x+A.y;++i);
    for(;i<=k&&fib[i]<=B.x+B.y;++i){
        if(fib[i]<=min(A.x+B.y,A.y+B.x)) cnt+=(fib[i]-(A.x+A.y)+1);
        else if(fib[i]<=max(A.x+B.y,A.y+B.x)) cnt+=min(B.y-A.y,B.x-A.x)+1;
        else cnt+=(B.x+B.y-fib[i]+1);
    }
    return cnt;
}
int main() {
	freopen("fibo3.in","r",stdin);
	freopen("fibo3.out","w",stdout);
	Fibo();
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
	    Cord A,B;
	    scanf("%lld %lld %lld %lld",&A.x,&A.y,&B.x,&B.y);
	    printf("%lld\n",Count(A,B));
	}
	return 0;
}