Pagini recente » Cod sursa (job #3209367) | Cod sursa (job #3123869) | Cod sursa (job #915948) | Cod sursa (job #2683466) | Cod sursa (job #466468)
Cod sursa(job #466468)
#include<cstdio>
long long rez,x1,y1,x2,y2,n,p1,p2,q1,q2,nr1,nr2,t1,t2,poz,nrfib,fib[1000];
void getfibos()
{
long long MAX=2;
for(int i=1;i<=15;i++)
MAX*=(long long)10;
fib[0]=fib[1]=1;
nrfib=1;
while(fib[nrfib]+fib[nrfib-1]<=MAX)
{
nrfib++;
fib[nrfib]=fib[nrfib-1]+fib[nrfib-2];
}
}
long long cautb(long long x)
{
long long i=0,pas=1<<10;
for(i=0;pas;pas>>=1)
if(i+pas<=nrfib)
if(fib[i+pas]<=x)
i+=pas;
return i;
}
long long maxim(long long a,long long b)
{
return a>b?a:b;
}
long long minim(long long a,long long b)
{
return a<b?a:b;
}
int main()
{
freopen("fibo3.in","r",stdin);
freopen("fibo3.out","w",stdout);
scanf("%lld",&n);
getfibos();
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);
poz=cautb(x2+y2);
rez=0;
for(int j=1;j<=poz;j++)
{
p1=maxim(x1,0);
p2=minim(x2,fib[j]);
if(p2>=p1)
{
nr1=p2-p1+1;
q1=fib[j]-p1;
q2=fib[j]-p2;
t1=maxim(y1,q2);
t2=minim(y2,q1);
if(t2>=t1)
{
nr2=t2-t1+1;
rez+=(long long)minim(nr1,nr2);
}
}
}
printf("%lld\n",rez);
}
return 0;
}