Pagini recente » Clasament All You Can Code 2008 | Cod sursa (job #204967) | Cod sursa (job #1440544) | Cod sursa (job #2010397) | Cod sursa (job #2022252)
#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;
}