Cod sursa(job #466140)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 26 iunie 2010 11:11:59
Problema Fibo3 Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 2 Marime 1.28 kb
#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 i=1;i<=poz;i++)
        {
            p1=maxim(x1,0);
            p2=minim(x2,fib[i]);
            nr1=p2-p1+1;
            q1=fib[i]-p1;
            q2=fib[i]-p2;
            t1=maxim(y1,q2);
            t2=minim(y2,q1);
            nr2=t2-t1+1;
            rez+=minim(nr1,nr2);
        }
        printf("%lld\n",rez);
    }
    return 0;
}